変換後のPDFにおいて、ExcelのOffice上の印刷ページ数(印刷プレビューの内容)と一致しない事象が発生し、PDFに空白のページが生まれてしまいます。ページレイアウトの「拡大/縮小」設定において100%以外の場合でも、変換後のPDFにおけるページ数をOfficeの印刷ページ数と一致させる方法はありますか?希望としては常に印刷プレビュー通りの改ページ位置で出力したいです。
<ソース抜粋>
#ExcelのPDF変換処理は、PDFバージョンを1.7固定および文字化け抑止のためフォント互換性チェックを有効にして変換を実施している。
Workbook workbook = new Workbook(inputFilePath);
com.aspose.cells.PdfSaveOptions saveOptionsForCell = new com.aspose.cells.PdfSaveOptions();
saveOptionsForCell.setCompliance(com.aspose.cells.PdfCompliance.PDF_17);
saveOptionsForCell.setCheckFontCompatibility(true);
workbook.save(outFilePath, saveOptionsForCell);
workbook.dispose();
@NobuakiShibuya
ご質問の要点は、スケーリングを 100 % 以外に設定した状態で、Excel の印刷プレビューと同一の改ページ位置で PDF を出力できるかという点です。
1. スケーリングが 100 % でない場合のページブレーク
PageSetup.FitToPagesTall または FitToPagesWide に 1 以上の数値を設定すると、ページを自動的に縮小します。この状態では自動改ページが機能しなくなることがあります [4]。そのため、Excel のプレビューと同じ改ページ位置を自動的に再現するのは難しいです。
2. 取れる対策
| 方法 |
内容 |
補足 |
| スケーリングを 100 % に保つ |
FitToPagesTall = 0、FitToPagesWide = 0 として自動縮小をオフにすれば、Excel と同様の自動改ページが適用されます。 |
|
| 手動で改ページを設定する |
Worksheet.getHorizontalPageBreaks().add(rowIndex) などで必要な位置に手動改ページを挿入します。手動改ページはスケーリングの影響を受けません [5]。 |
|
| 印刷領域を分割して個別に縮小 |
連続しない印刷領域を PageSetup.setPrintArea("A1:H50,A52:H100") とし、FitToPagesTall = 1 で各領域を 1 ページに収める方法があります。ただし、Excel が領域を結合してしまう点に注意が必要です [4]。 |
|
サンプルコード(Java)
Workbook wb = new Workbook(inputFilePath);
Worksheet ws = wb.getWorksheets().get(0);
PageSetup ps = ws.getPageSetup();
// ① スケーリングを 100% に設定(自動改ページを有効化)
ps.setFitToPagesTall(0);
ps.setFitToPagesWide(0);
// ② 必要に応じて手動改ページを追加
ws.getHorizontalPageBreaks().add(50); // 例:50 行目で改ページ
PdfSaveOptions opts = new PdfSaveOptions();
opts.setCompliance(PdfCompliance.PDF_17);
opts.setCheckFontCompatibility(true);
wb.save(outFilePath, opts);
wb.dispose();
まとめ
- スケーリングを 100 % 以外に設定した場合、Aspose.Cells では自動改ページが正しく再現されないことがあります [4]。
- 同一の改ページ位置を保証したい場合は、スケーリングを 100 % に戻すか、手動で改ページを設定してください。手動改ページはスケーリング設定に左右されず、PDF でも正確に反映されます [5]。
@NobuakiShibuya,
入力されたExcelファイルと出力されたPDFファイルを圧縮して添付してください。すぐに問題を評価いたします。
@NobuakiShibuya
フォントが正しくインストールされているか確認してください