変換後の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
フォントが正しくインストールされているか確認してください
ご回答ありがとうございます。システムの都合上、変換元のExcel側のフォーマットを指定することはできず、「スケーリング100%、もしくは手動改ページ」を常に満たすことはできません。自動改ページで印刷プレビュー通りの出力する術は皆無でしょうか。
@NobuakiShibuya
ご質問の要点は、スケーリングを 100 % にできず、手動改ページも必ず設定できない状態で、Excel の印刷プレビューと同じ改ページ位置で PDF を出力できるかということです。
結論
- 自動改ページだけで印刷プレビューと同一のページ分割を実現することはできません【1】。
- 実現するには、
- スケーリングを 100 %(
FitToPagesTall = 0、FitToPagesWide = 0)にする、または
- 必要な箇所に手動改ページを追加する
のいずれかが必須です。手動改ページはスケーリング設定の影響を受けず、PDF にも正確に反映されます【1】。
具体的な対策
1. スケーリングを 100 % に戻す(自動改ページを有効化)
Workbook wb = new Workbook(inputFilePath);
Worksheet ws = wb.getWorksheets().get(0);
PageSetup ps = ws.getPageSetup();
// スケーリングをオフにする
ps.setFitToPagesTall(0);
ps.setFitToPagesWide(0);
2. 手動で改ページを挿入する(スケーリングが 100 % でなくても有効)
// 例:50 行目で横方向の改ページ、列 H の後で縦方向の改ページを追加
ws.getHorizontalPageBreaks().add(50); // 行インデックスは 0 基準
ws.getVerticalPageBreaks().add(7); // 列インデックスは 0 基準(A=0, B=1 …)
3. PDF へ保存
PdfSaveOptions opts = new PdfSaveOptions();
opts.setCompliance(PdfCompliance.PDF_17);
opts.setCheckFontCompatibility(true);
wb.save(outFilePath, opts);
wb.dispose();
補足
FitToPagesTall または FitToPagesWide に 1 以上の値が設定されていると、自動改ページは機能しなくなります【1】。そのため、Excel のプレビューと同じページ分割は再現できません。
- 手動改ページはスケーリング設定に依存しないので、上記のようにプログラムで追加すれば必ず PDF に反映されます【1】。
したがって、スケーリングを 100 % にするか、手動で改ページを設定する以外の方法で、印刷プレビュー通りの自動改ページを PDF に合わせる手段は現在の Aspose.Cells for Java にはありません。ご利用のシステムでどちらかをご検討ください。
ありがとうございます。
フォントのインストールは、「MS Pゴシック」しか利用していないので標準としてインストールされている認識です。独自のフォントは利用していません。
@NobuakiShibuya ,
ご指摘のとおり、ページ区切りの問題は再現可能です。社内の問題追跡システムに以下の新規チケットを登録し、無料サポートポリシーに記載されている条件に従って修正を提供いたします。
問題ID:CELLSJAVA-46631
優先的にサポートが必要な場合は、有料サポートサービスをご利用いただけます。有料サポート管理チームへの直接アクセスも可能です。
@NobuakiShibuya,
問題を修正中です(既に「CELLSJAVA-46631」というIDでチケットを登録しました)。もし単一のPDFページにレンダリングする必要がある場合は、そのタスクを達成するためにコードセグメントに1行追加してみてください。
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);
**saveOptionsForCell.setOnePagePerSheet(true);**
workbook.save(outFilePath, saveOptionsForCell);
workbook.dispose();
APIの問題が解決次第、こちらでお知らせします。
ありがとうございます。
saveOptionsForCell.setOnePagePerSheet(true);
上記コードですが、Excelが何ページであろうがPDFは強制的に1ページ(単一のPDF)に集約するAPIとの理解ですが、システムの要件的に利用できません。
Excel複数ページの場合もあるため、あくまでも印刷プレビュー通りに出力したいものになります。
@NobuakiShibuya ,
Excelの印刷ビューと一致するよう、問題の修正に努めます。進捗状況が分かり次第、お知らせいたします。
よろしくお願いします。本件、対応目途などお分かりになりますでしょうか。有償サポートの契約をしていますので、お時間要する場合は有償チケットの払い出しに切り替えたいと考えています。
@NobuakiShibuya ,
すでに新リリース 26.2 を準備しているため、コードは 26.2 でリリースロックされています。
初期評価の後、2026 年 3 月中旬に予定されている 26.3 で問題を修正する予定です。
ありがとうございます。
26.3の更改で対応されること、承知しました。
お手数ですが26.3リリースより前に、事前にパッチ版を提供頂くことは可能でしょうか。
問題が改善されていることを当方の環境でも検証したいと考えているためです。
@NobuakiShibuya,
残念ながら、暫定修正やリリースは有料サポート契約のお客様に限定されています。このサポートフォーラムをご利用の一般ユーザーには、そうした修正を提供することができません。Aspose.Cells v26.3(3月リリース)の公開をお待ちいただくか、有料サポートサービスのご利用をご検討ください。優先的なサポートをご希望の場合は、有料サポートサービスを通じて専任のサポート管理チームに直接アクセスすることが可能です。
承知しました。
有料サポートの利用を検討します。
契約はしています。
ありがとうございました。
@NobuakiShibuya,
ご理解いただきありがとうございます。ご質問やご意見がございましたら、どうぞお気軽にお問い合わせください。
@shlomi.z,
お客様が報告された問題(チケットID: “CELLSJAVA-46631”)につきまして、有料サポートヘルプデスクを通じてエスカレーションされたため、優先的に解決されたことをお知らせいたします。通常、この修正は次回の公式リリース(Aspose.Cells v26.3)に含まれる予定であり、2026年3月上旬にリリースが予定されています。ただし、有料サポートチケット(スレッド)を通じて修正を直接ご利用いただけます。このホットフィックスは今後数日以内にご提供できる見込みです。ご理解とご協力に感謝申し上げます。