DockerでdocのPDF変換でページのズレが発生(続き)

連投になってしまい申し訳ありません。
元々の質問に関する投稿はこちらに記載してあります。
DockerでのdocファイルPDF変換時のページがずれ問題 - 日本語 - Ask LibreOffice

ここにおいて、WSL環境上でGUIのLibreOfficeからフォント設定で所定のフォントをIPA明朝などに変換する設定を行い、その際のregistrymodifications.xcuをDockerにコピーすることで、Docker環境内でPDF変換を行っても、一律でIPA明朝などのフォントに揃えられて出力されることを確認できました。それに関してはひとまず望ましい出力であると考えています。

しかし、今度は以前までと逆で、出力されたPDFの行間幅が元のdocファイルに比べて小さくなってしまい、本来元ファイルなら次のページで記述されるべき行の文が、一つ前のページに記載されていることが確認されました。

これについて、以下の点をご教示頂ければ幸いです。
1.行間幅をregistrymodifications.xcuなど(あるいはマクロ)から調整して、元のdocファイルと同様の行間幅を設定する方法(IPAフォントに対して)
2.元のdocファイル(verify_doc.doc)は日本語文字に限らず英数字も"MS P明朝"で記述されており、上記のページで頂いた回答での設定を行った所、PDF変換後はすべてIPA P明朝フォントで出力されます。しかし、上記の設定を行う以前のWSLのUbuntu環境でPDF変換した際(doctest4.pdf)には、英数字はDejaVu Sansで出力されていました。なので、元のファイル内のフォントがすべてMS明朝などであっても、英数字に対してはDejaVu Sansにするなどの設定の方がよいのかもしれません。ただし、この場合でも厳密にはフォント設定自体は異なるので、ページのズレは少なくできても完全にはなくせないのかもしれません。。。
[以前のregistrymodifications.xcu下でのWSL内でのPDF変換結果]
doctest4.pdf (18.5 KB)

[改めて検証したファイル]
verify_doc.doc (31 KB)
verify_doc.pdf (15.8 KB)

行間が狭くなり、2ページ目に5行表示されるべきところ2行しか表示されていないということでしょうか?


今回のケースではVer.5.2で望ましい表示となっているよう。
Ver.5.2から5.3の間のコミット2396893edae9ad6f3dc135c02c288d0e583c581c
vcllo.dllの変更が境目っぽい。(初めてWindowsでbisectした。Linuxでは違いそう)
verify_doc(5.2.7).pdf (13.5 KB)


現在のバージョンで、マクロで調整する方法を私は思いつきません。

1 Like

検証不十分ですが、LibreOfficeで開いているdocファイル(ページ設定で行数指定がないファイル)の段落間隔を広げるマクロ

Sub doc2odtFMT
	oDoc = Thiscomponent
 	oDText = oDoc.getText()
	oEnum = oDText.createEnumeration()
	
	oStyleF = oDoc.getStyleFamilies
	oStyleP = oStyleF.getByName("ParagraphStyles")
	oStyleS = oStyleP.getByName("Standard")
	oFontS = oStyleS.CharHeightAsian

	Do While oEnum.hasMoreElements()
		PMode = 0
		PHSize = 0
		oPar = oEnum.nextElement()
		If oPar.SupportsService("com.sun.star.text.Paragraph") then
			'フォントの変更
			Select Case oPar.CharFontName
				Case "BIZ UD明朝 Medium"
					oPar.CharFontName = "BIZ UDMincho;IPA明朝;Takao明朝"
				Case "BIZ UDP明朝 Medium"
					oPar.CharFontName = "BIZ UDPMincho;IPA P明朝;Takao P明朝"
				Case "BIZ UDゴシック"
					oPar.CharFontName = "BIZ UDGothic;IPAゴシック;Takaoゴシック"
				Case "BIZ UDPゴシック"
					oPar.CharFontName = "BIZ UDPGothic;IPA Pゴシック;Takao Pゴシック"
				Case "MS 明朝"
					oPar.CharFontName = "IPA明朝;Takao明朝;BIZ UDMincho"
				Case "MS P明朝"
					oPar.CharFontName = "IPA P明朝;Takao P明朝;BIZ UDPMincho"
				Case "MS ゴシック"
					oPar.CharFontName = "IPAゴシック;Takaoゴシック;BIZ UDGothic"
				Case "MS Pゴシック"
					oPar.CharFontName = "IPA Pゴシック;Takao Pゴシック;BIZ UDPGothic"
			End Select
			
			Select Case oPar.CharFontNameAsian
				Case "BIZ UD明朝 Medium"
					oPar.CharFontNameAsian = "BIZ UDMincho;IPA明朝;Takao明朝"
				Case "BIZ UDP明朝 Medium"
					oPar.CharFontNameAsian = "BIZ UDPMincho;IPA P明朝;Takao P明朝"
				Case "BIZ UDゴシック"
					oPar.CharFontNameAsian = "BIZ UDGothic;IPAゴシック;Takaoゴシック"
				Case "BIZ UDPゴシック"
					oPar.CharFontNameAsian = "BIZ UDPGothic;IPA Pゴシック;Takao Pゴシック"
				Case "MS 明朝"
					oPar.CharFontNameAsian = "IPA明朝;Takao明朝;BIZ UDMincho"
				Case "MS P明朝"
					oPar.CharFontNameAsian = "IPA P明朝;Takao P明朝;BIZ UDPMincho"
				Case "MS ゴシック"
					oPar.CharFontNameAsian = "IPAゴシック;Takaoゴシック;BIZ UDGothic"
				Case "MS Pゴシック"
					oPar.CharFontNameAsian = "IPA Pゴシック;Takao Pゴシック;BIZ UDPGothic"
			End Select

			Select Case oPar.ParaLineSpacing.Mode
				Case 0
					If oFontS > 10.5 Then
						oPar.ParaTopMargin = oPar.ParaTopMargin + Int(( ((oFontS - 10.5) * 35.27 ) + 5 )/10) * 10
						PHSize = int(((oPar.CharHeightAsian + 3.25) * oPar.ParaLineSpacing.Height / 100 ) / oPar.CharHeightAsian * 100)
					Else
						PHSize = int(((oPar.CharHeightAsian + 2.1) * oPar.ParaLineSpacing.Height / 100  + 1.15) / oPar.CharHeightAsian * 100)
					End If
					If oPar.ParaLineSpacing.Height > 100 Then
						PTMSize = int((oPar.ParaLineSpacing.Height - 100) / 100 * 3 * 35.27)
						oPar.ParaBottomMargin = oPar.ParaBottomMargin  + PTMSize
					End If
					oParPLS = oPar.ParaLineSpacing
					oParPLS.Mode = 0
					oParPLS.Height = PHSize
					oPar.ParaLineSpacing = oParPLS
				Case 1
					'最小値
					If oFontS > 10.5 Then
						PHSize = oPar.ParaLineSpacing.Height + int(((oFontS - 10.5) + 2) * 35.27)
					Else
						PHSize = oPar.ParaLineSpacing.Height + int( 1.6 * 35.27)
					End If
					oParPLS = oPar.ParaLineSpacing
					oParPLS.Mode = 1
					oParPLS.Height = PHSize
					oPar.ParaLineSpacing = oParPLS
				Case 2
					'行間余白(Wordにはなさそう)
					Case 3
					'固定値
					'変更しない
			End Select
		End If
		m = m + 1
	Loop
	Msgbox m & "個の段落設定を変更しました"
End Sub