close

iText製品Q&A 02

iText製品Q&A 01はこちらから

FontFactory.GetFont()がすべてのフォントで機能しないのはなぜですか?

これは機能しません。変数georgiaを確認すると、Familyプロパティが値UNDEFINEDに設定され、 FamilyNameプロパティがUnknownに設定されています。

フォントファイルをロードして登録し、次のように取得した場合にのみ機能します。

なぜそうなるのでしょうか?

Water Cooler v2が2014年6月3日にStackOverflowに投稿しました。

iTextはJavaで記述されているため、プラットフォームに依存しません。 14個のStandardType 1フォント(Helvetica4種類、Times Roman4種類、Courier、Symbol4種類、ZapfDingbats) のメトリックを含む14個のAFMファイルが付属しています。

他のフォントが必要になったらすぐに、フォントディレクトリへのパスまたはフォントへのパスによりフォントファイルを登録します。 Linuxのフォントディレクトリは、Windowsのフォントディレクトリとは異なります (Linuxには「C:/ Windows / fonts」はありません)。 registerSystemFontDirectories()というメソッドがあり、現在使用しているOSを調べて、「いつもの候補」をすべて登録します。 (iTextはOSに基づいてフォントパスを推測します) この方法は、検出されたすべてのフォントを登録するため、時間とメモリがかかります。

フォントが登録されたら、FontProgramFactoryに登録名を確かめることができます。 これはFontFactoryExampleに示されています。 getRegisteredFonts()メソッドとgetRegisteredFontFamilies()メソッドの違いに気づくことでしょう。

追記:元の質問は、Javaから移植されたC#のiTextに関するものであり、 Javaで記述された元のバージョンに可能な限り近づけようとします。それでも、同じ論理的根拠を当てはめることが出来ます。 iTextがフォントディレクトリをスキャンする必要がある場合、アプリケーションの起動が遅くなります。 ほとんどのアプリケーションでは、必要なフォントはそんなに多いわけではありません。 Windowsのfontsディレクトリで利用可能なすべてのフォントを登録するのはお勧めできません。

itext-asian.jarを使用するときにUnsupportedCharsetExceptionを解決する方法は?

コード

例外

2014年9月14日にHanKunがStackOverflowに投稿しました。

iText 7では、次のようなフォントを作成します。

CJKフォント(Adobe Readerでフォントパックが必要なフォント)を使用する場合は、 KozMinPro-Regular(otfなし)を使用する必要があります。

「KozMinPro-Regular.otf」という名前のファイルがある場合、font-asian.jarは必要ありません (iText 5のitex-asian.jarのように)。 そのフォントプログラムでサポートされているエンコーディングのフォントファイルを使用してください。

フォント行間距離の計算・設定方法は?

このコードスニペットが示しているように、フッターを追加するためにPdfPageEventHelperを実装しています。

3行を追加する必要があるのですが、行間の距離を計算する方法がわかりません。 各行は異なるフォントサイズを持っています。document.bottom() - XXXのXXX値として何を使用すればよいのでしょうか?

2013年9月17日にDhaval がStackOverflowに投稿しました。

2行の差がleadingです。 leadingは自由に選べますが、フォントサイズの1.5倍を使用するのが慣例です。 さまざまなフォントサイズを使用して、自分で1行ずつ描いているため、そのフォントサイズに基づいてY値を調整する必要があります。 Canvas.showTextAligned()は、追加するテキストのベースラインとしてY値を使用するため、 フォントサイズが12ptのテキストがある場合は、18ptのleadingを考慮する必要があります。 フォントサイズが8ptの場合は、12ptになるようにするわけです。

「慣習」に基づいた簡単な解決策です。 特定の水平方向のスペースがどれだけかかるかを知りたい場合は、 アセンダーとディセンダーを計算する必要があります。 bfがフォント(PdfFontオブジェクト)、textがテキスト(String)、 sizeがフォントサイズ(float)の場合、テキストの高さはheightと同じになります。

yがshowTextAligned()で使用されるY座標である場合は、y + aboveBaselineとy + underBaselineの間のスペースを空けてください。 これが解決策です。

document.bottom()-20はちょっと変な感じですね。。 PDF座標系のY軸が下向きではなく上向きであるため、document.bottom()+ 20が必要です。

iTextでPDF / UA互換のPDFを生成するにはどうすればよいですか?

iTextのサイトには、iText2.1.7を使用して動的に生成されたPDFが多数あります。 一方で障害等で、JAWSなどのスクリーンリーダーを使用してPDFをレンダリングするユーザーも多数います。 setTagged()メソッドを使用してPDFにタグを付けますが、PDFの一部の要素が順序どおりに表示されません。 setTagged()を呼び出した後におかしくなる場合もあります。

2013年Bruno LowagieがiTextに関するインタビューでPDF / UAについて言及しています。 この問題を解決する資料のようですが、PDF / UAドキュメントを生成する方法の良い例を見つけることができませんでした。 例を挙げていただけますか?

2015年1月29日にk-denがStackOverflowに投稿しました。

PdfUAの例を見てください。PDF / UAに準拠するために必要なものを段階的に説明しています。 同様の例が、2014年のiTextサミットとJavaOneで発表されました。 iTextサミットのビデオチュートリアルを見てください。

setTaggedドキュメントでタグ付けされたドキュメントを作成しますが、それだけでは不十分です。 ドキュメントデータを設定する必要があります。ドキュメントのタイトルを表示し、 ドキュメントで使用されている言語を指定してください。 XMPメタデータは必須です。

すべてのフォントを埋め込みます。画像がある場合は、別途説明が必要となります。 この例では、「dog」と「fox」という単語を画像に置き換えています。これらの画像が正しく「読み上げられる」ようにするには、 getAccessibilityProperties().setAlternateDescription()メソッドを使用する必要があります。

例の最後に、番号付きリストを追加しました。 別の質問では、リストがJAWSによって正しく読み上げられていないとの記載があります。上記の例で作成されたPDFファイル、 (具体的にはpdfua.pdf)を確認すると、JAWSが番号とテキストを正しい順序で、期待どおりにドキュメントを読み取っていることが分かります。

これを試してみると「うまくいかない」理由が分かります。 PDF / UA標準より3年古いバージョンのiTextを使用しているからです。 また、使用しているバージョンでは、setTagged()メソッドを使用するときに、最も低いPDFレベルでタグ構造を作成する必要があります。 最新バージョンでは、iTextがハイレベルで処理します。あなたが望むことを実現するには、最新の iText バージョンが必要です。

PDFからテキストとアンカー情報を抽出する方法は?

iTextを使用してテキストとアンカー情報を抽出する方法を探しています。

例:PDFの内容は「WebサイトXYZにアクセスして、xxxをしてください。」で、XYZはクリック可能なリンクです。 このコンテンツを抽出するときの出力は、「WebサイトXYZ(www.google.com)にアクセスして、xxxをしてください。」になります。

基本的に、ターゲットリンク情報を含むテキストファイルを生成しようとしています。

2014年7月10日にuser985395がStackOverflowに投稿しました。

PDFファイルに表示される静的テキストは、 Adobeのイメージングモデルで説明されているPDF構文を使用してコンテンツストリームに保存されます。

PDFファイルに表示されるインタラクティブ機能は、カルーセルオブジェクトシステム(COS)を使用して、 ページのコンテンツストリームの外部にある、いわゆる注釈辞書に保存されます。

クリック可能な単語XYZが表示された場合、PDF内にXYZのようなものがあるという仮定をしていることでしょうが、 そうではありません。

ページの/ Contentsを含むコンテンツストリームのどこかにあります。
ページの/ Annotsを調べると、次のようなものが見つかります。

ドキュメントからすべてのリンクと対応するテキストを抽出する場合は、すべてのページ辞書をループし、 / Annotsを取得し、サブタイプ/ Linkの注釈を確認し、アクション(/ A)と座標(/ Rect)を取得する必要があります。

どのテキストがテキストに対応するかを知るには、「リージョンテキスト」 ストラテジーでiTextテキストパーサークラスを使用し、/ Rectエントリで定義された位置でテキストを抽出する必要があります。

英語のPDFページから抽出したテキストが文字化けするのはなぜですか?

コンソールのPDFから英語のテキストを抽出して印刷しようとしています。 抽出は、iTextのPdfTextExtractorクラスを介して行われますが、テキストは理解できません。 次のコードスニペットは、私の文字列エクストラクタを表しています。

PDFのテキストが英語であっても、コンソールに表示される出力は理解できません。

ソースPDFのように、英語でテキストを表示するための解決策を教えてください。

Codechefvaibhavkashyapが2014年5月16日にStackOverflowに投稿しました。

ページ上の位置に基づいてテキストを並べ替える場合は、LocationTextExtractionStrategy などのストラテジーを導入する必要があります。

LocationTextExtractionStrategy を使用すると、ページ上で文字が「踊る」 (同じ行のテキストでグリフのベースラインが異なる)場合など、奇妙な文になることがあります。 その場合は、 PDF構文コンテンツストリームに表示される順序でテキストを返すSimpleTextExtractionStrategyを試してみてください

Type3フォントを使用して追加したテキストをPDFから正しく抽出できないのはなぜですか?

PDFBoxを使用してテキストを抽出すると、フォントType3のテキストが含まれるアラビア語のPDFファイルがあります。 一部の文字が空で、フォントがnullになっています。 何が問題なのでしょうか。

iTextで生成されたストリームは次のようになります: ( dJ? v{d W?cG?)Tj

疑問符は、1文字ではなく、「SOH-STX-ETX-EOT」としてストリームに表示されます。 PDF内の文字は、「d」および「J」として表示されます。

AymanYounisが2014年2月9日にStackOverflowに投稿しました。

Type3フォントは、ユーザー定義のフォントです。 たとえば、ユーザーは、文字「P」が 「The Artist Formerly Known As Prince」のPrinceのPに対応し、既知のアルファベットのPには対応しないことを定義することができます。

 ※TAFKAPシンボル

Type3フォントのグリフは一連の線と形であり、iTextやPDFBoxなどのプログラムでは、どの文字を意味しているかを判断できません。 クエスチョンマークが表示されるのは正常なことです。

Type3フォントを含むPDFには、次のいずれかの理由が当てはまります。

  • どのフォントにも存在しない記号を導入するために、そのフォントが使用された。
  • PDFの内容を難読化し、内容を抽出できないようにするために、そのフォントが使用された。
  • PDFがエレガントな方法で作成されていない。

Type 3フォントが通常の文字に使用されていた場合、OCRを使用してコンテンツを通常のテキストに変換する必要があります。

location extraction strategyを適用した後text extraction strategyの使用方法は?

次のコードを使用して、特定の場所からPDFでデータを取得しました。

その場所に太字テキストを表示したいのですが、 TextExtractionStrategyの代わりにFontBasedTextExtractionStrategyというメソッドまたはクラスを作成した方がよいのでしょうか。

2014年7月1日にRakaがStackOverflowに投稿しました。

iText 7のParseCustomの例を見てください。 この例では、カスタムTextRegionEventFilter(ITextExtractionStrategyではない)を作成します。

これにより、PostScriptフォント名が太字または斜体で終わるテキストのみがフィルタリングされます。
このフィルターの使用方法は次のとおりです。

フォントに基づいて自作のフィルターを使用するLocationTextExtractionStrategyを作成します。 テキストを抽出するには、processPageContent()を使用します。

既存のPDFに別のページへのハイパーリンクを挿入するにはどうすればよいですか?

別のページのcoordinateにジャンプするリンクを既存のPDFに追加したいです。

下記コードを使用して長方形を追加しました。

クリック可能なリンクを作成するにはどうすればよいですか?

dazzler77が2012年11月19日にStackOverflowに投稿しました。

すでに長方形を追加しているので、注釈も追加してください。 これはJavaでどのように見えるかです:

このコードサンプルの"page"は、リンクを追加したいページの番号を追加します。 "rectangle"はそのページ上の座標を定義するRectangleオブジェクトです。iTextSharpでも同様のメソッドを使用できます。

iTextSharpを使用してPDFのズームレベルを設定するにはどうすればよいですか?

iTextSharpを使用してPDFファイルのズームレベルを75%に設定する必要があります。 次のコードを使用してズームレベルを設定しています。

しかし、doc.Close()で「ページ1はリクエストされましたが、ドキュメントには0ページしかありません」 というエラーが表示されます。

2014年6月6日にmail2vgunaがStackOverflowに投稿しました。

AddOpenActionの例を見てください。 これがiText7で行われている方法です。

75%のズーム率で開くPDFです。

あるいは、iText 7では、必要に応じて、同様のメソッドをPdfLinkAnnotation、PdfScreenAnnotation、 またはPdfWidgetAnnotationで使用できます。 これは、注釈を使用してPDFの表示拡大アクションをトリガーします。

iTextで「リンクされた長方形」を挿入するにはどうすればよいですか?

既存のPDFにハイパーリンクを挿入したい:特定のページにすでに長方形の座標があります。 この長方形を同じPDFの別のページにリンクしたいと思います。 方法を教えてください。

2013年11月7日にHansStrickerがStackOverflowに投稿しました。

AddLinkAnnotationの例を見てください。

既存のPDFを操作する際、PdfDocumentを使うことができます。 あるページの長方形のリンクを別のページに追加するのは、 そのページにリンク注釈を追加するのと同じくらい簡単です

リンクオブジェクトは、以下を使用して作成されます。

  • 矩形(あらかじめわかっている位置)
  • ハイライトモード(1つ選択:HIGHLIGHT_NONE、HIGHLIGHT_INVERT、HIGHLIGHT_OUTLINE、HIGHLIGHT_PUSH、HIGHLIGHT_TOGGLE)
  • リンク先
  • リンクしたいページ

PdfAnnotationのインスタンスを取得したら、addAnnotation()メソッドを使用して特定のページに追加できます。

In Reply Toの注釈を追加するには?

iTextSharpを使って、pdfに付箋の返信を追加しようとしています。pdfの中に新しい注釈を作成することができます。 しかし、すでにある注釈の子としてリンクさせることができません。親にあるプロパティのほとんどを子にコピーしました。 返信のプロパティを解析したり、Adobe Readerから手動で返信を追加したりしてコピーしました。 不足しているのは、/IRTというプロパティです。これは、親ポップアップへの参照を必要とします。 IRT 16 0 Rのように。このリファレンスを見つけるにはどうしたらいいでしょうか?

JoseTuttuが2015年2月11日にStackOverflowに投稿しました。

AddInReplyToの例を見てください。

次のようなhello_sticky_note.pdfという名前のファイルがあります。

 ※付箋付きのPDF

例でこの注釈が/ Annots配列の最初のエントリ(インデックス0のアノテーション) であることがわかっているので、「in reply to」注釈を追加する方法は次のとおりです。

元の注釈(このコードではstickyという名前になっています)を取得し、その注釈の位置を取得します。 stickyRectangleオブジェクトを作成し、そのstickyRectangleを使用してreplyStickyという名前の新しいPdfTextAnnotationを作成します。 次に、不足している下記部分を追加します。

結果のPDFは下記のようになります。

 ※付箋とこの付箋への返信があるPDF

返信に/NMプロパティがありません。自動生成されると思ったのですが。 NMプロパティを外部DBに保存するのは確実なのでしょうか?

/ NMエントリは次のように定義されます。
(オプション)注釈名:ページ上のすべての注釈の中で一意に識別するテキスト文字列。

ページに同じ名前の他の注釈がない限り、返信に必要な文字列を選択できます。

この名前は、PDFのIDおよび注釈が追加されたページのページ番号とともに外部DBに保存できます。

PushButtonField、RadioCheckFieldなどのようにAcroFieldsから特定のタイプを取得するにはどうすればよいですか?

 ※ラジオボタンとチェックボックスを備えたフォーム

AcroFields.GetField(string name);を呼び出すと文字列だけを取得できます。 AcroFields.GetFieldItem(string name);を呼び出すとオブジェクトは取得できましたが、特定のタイプにキャストできません。

AcroFields.SetFieldProperty( "myfield"、 "CheckType"、RadioCheckField.TYPE_STAR、null) も試しましたが、毎回falseになります。

既存のPDFを持っています(このファイルは自分で生成していません)。 その中にチェックボックスがあります。 「CheckType」を次のように変更したいです。

しかし、AcroFieldを特定のタイプにキャストできないため、プロパティ「CheckType」にアクセスできません。 どうしたらよいのでしょうか。

StackOverflowに2015年10月20日に匿名にて投稿されました。

この投稿は2つの質問がされています。 最初の質問から始めましょう:

PushButtonField、RadioCheckFieldなどのようにAcroFieldsから特定のタイプを取得するにはどうすればよいですか?
これは、FormInformationの例で説明されています。

このコードスニペットは、フィールドのタイプ、およびラジオ・フィールドとチェックボックスの取り得る値が格納されています。

これをdatasheet.pdf上で実行すると、次のような結果が得られます。


次に2番目の質問についてです。
チェックタイプを見つけるにはどうすればよいですか? どうすれば変更できますか?

この質問は、PDFの理解の欠如によるものです。 前の回答でチェックボックス(またはラジオボタン)の取り得る値を探したとき、異なる外観の状態を尋ねました。 これらの外観状態は、PDF構文で表現される小さなコンテンツです。

例えば、いくつかのラジオボタンとチェックボックスのあるフォームを見てみましょう。
外から見ると、次のようになります。

 ※ラジオボタンとチェックボックスを備えたフォーム

[English]の横のチェックボックスは、空の正方形、またはピンクがかった背景と十字のある正方形にすることができます。 内部を見てみましょう。

 ※フォームの裏側を見る

テーブルのチェックボックスです。/ Yesと/ Offの2つの外観状態があることがわかります。 これらの状態が選択されたときにどのように見えるかは、ストリームで説明されています。

/ Off状態のストリームはかなり単純です。

 ※Syntax off state

長方形を作成し(re)、塗りつぶさずに描画している(S)ことがすぐにわかります。

/ Yes状態は少し複雑です。

 ※Syntax yes state

塗りつぶしの色が変更されていることがわかります。(rg) 長方形を黒でストロークし、定義された塗りつぶしの色を使用して塗りつぶします(B)。 次に、moveTo(m)操作とlineTo(l)操作で2つの線を定義し、ストロークします(S)。

PDF構文に習熟している場合は、色付きの長方形の内側に十字を描いていることが簡単にわかります。 PDFを使いこなしているという条件付きで質問にお答えします

外観を置き換える場合は、長方形と十字を描画するストリームを置き換える必要があります。 IText7では、人気のある外観をいくつか追加したため、次のような要素を作成するときに簡単に使用できます。

checkTypeには、TYPE_CHECK、TYPE_CIRCLE、TYPE_CROSS、TYPE_DIAMOND、TYPE_SQUARE、TYPE_STARを指定することができます。 または、次を使用して既存の要素の外観を変更することもできます。

プログラムでPDFファイルに入力する方法は? (ダイナミックXFA)

コンピューターでAdobeAcrobatを使用して手動で入力できるダイナミックXFAフォームがあります。 iTextSharpを使用すると、XFA XMLデータを読み取り、データの構造を確認できます。 次のコードを使用してiTextで模倣しようとしています。

何らかの理由で、このコードは機能しません。

jon333が2013年5月11日にStackOverflowに投稿しました。
この質問には、質問を投稿した人が回答しました。

置換されるDomDocumentは、データまたはデータセットの部分だけでなく、 新しいドキュメントのマージされたXML全体である必要があるという問題を見つけました。

間違っていないのですが、bookの例を使用する方が良いと思います。

XFAXML全体を置き換える必要はありません。 fillXfaForm()メソッドを使用する場合は、データで十分です。

既存のPDFテンプレートから新しいフォームを追加するにはどうすればよいですか?

他のテンプレートからPDFテンプレートを作成したいと思っています。 出来上がったPDFは、データを記入できるテンプレートのままである必要があります。 PdfStamperを使用してみましたが、出来上がったPDFはテンプレートではありません。

2013年9月11日にcgnbkmがStackOverflowに投稿しました。

PDFテンプレートの性質に応じて、2つの状況を区別しましょう。

XFAテンプレートについて:
この場合、PDFはフォームを定義するXMLストリームのためのコンテナに過ぎません。変更する唯一の方法は、XMLを編集することです。 AdobeLiveCycle Designerを使用して手動で行うのが最適ですが、どうしてもプログラムで行いたい場合は、 iTextを使用してPDFからXMLを抽出し、あらゆる種類のXML編集ソフトウェアを使用してXMLを操作し、最後にiTextを使用してXMLをPDFに戻すことが可能です。 プログラムによる解決は、XFA構文に精通している必要があり、XFA仕様は数百ページにも及ぶため、非常に困難です。

AcroFormテンプレートについて:
この場合、ルートディクショナリには/ AcroFormディクショナリがあり、そのエントリの1つは空ではない/ Fields配列です。 iText 7を使用している場合は、このテンプレートのPdfDocumentインスタンスを作成し、pdfDocオブジェクトをPdfAcroForm.getAcroForm() メソッドに渡すことができます。 次に、必要な追加フィールド(テキストフィールド、ボタンフィールドなど)を作成し、フォームに追加します。

これが質問の答えではないと思われた場合、「PdfStamperを使用してみましたが、PDFはテンプレートではありません」 という質問をより明確に記載してください。

新しいAcroFormフィールドをPDFに追加するにはどうすればよいですか?

iTextを使用して、PDFの既存のAcroFormフィールドにデータを入力したことがあります。

PDFに新しいAcroFormフィールドを追加するためにはどうしたらよいのでしょうか。iTextで可能ですか?

Peterが014年11月30日にStackOverflowに投稿しました。

公式ドキュメント(具体的にはSubmitFormの例)に記載されています。 AddFieldという簡単な例を作成しました。 new Rectangle(36、700、36、30)で定義された特定の位置にボタンフィールドを追加します。 iText7に適合したコードは次のとおりです。

PdfButtonFormFieldオブジェクトを作成してから、PdfAcroFormインスタンスを使用してフィールドを追加します。

iTextSharpを使用してXFAPDFフォームをフラット化するにはどうすればよいですか?

NuanceのCSDKを使用するアプリケーションのUIに正しく表示するには、XFAフォームをフラット化する必要があると思います。 しかし「このメッセージが最終的に置き換えられない場合はしばらくお待ちください。」というメッセージが表示されます。

Chuckが2014年11月21日にStackOverflowに投稿しました。

XFAフォームをどのようにフラット化しているかを示すコードサンプルを挿入していません。 あなたのコードは次のようなものだと思います。

このコードは、AcroFormテクノロジーに基づいてフォームをフラット化しようとするときに機能します。 XMLフォームアーキテクチャ(XFA)に基づくフォームの場合、次のスニペットを使用する必要があります。

src、dest、およびxmlは、ドキュメントへの文字列パスです。

ダイナミックXFAフォームは、XFAを理解しないビューアに表示される単一ページのPDF (「お待ちください...」メッセージが表示されたもの)で構成されます。 ドキュメントの実際のコンテンツはXMLファイルとして保存されます。

XFAフォームを通常のPDFにフラット化するプロセスでは、XMLを解析し、XML構文をPDF構文に変換する必要があります。 これは、別の製品であるXFAワーカーを使用して実行できます。

2ページ目にフィールド出力を続けるにはどうすればよいですか?

あうテンプレートからPDFを生成しました。PDFの中央には、長さが可変のフィールドがあります。 フィールドのコンテンツがオーバーフローしたので、2番目のインスタンステンプレートを2ページのプログラムとして使用し、 同じフィールドを続行するように作業したいのですが可能ですか?

Carlos Mendietaが2014年11月10日にStackOverflowに投稿しました。

コンセプトを証明するためにAddExtraPageを作成しました。 ここには、「body」という名前のフィールドを持つPDFフォームsrcがあります。

まず、コンテンツがオーバーフローするたびにコピーされる最初のページのテンプレートを作成する必要があります。

PaginationEventHandlerは次のようになります。

ColumnDocumentRendererを使用して、フィールドで定義された位置にコンテンツを追加できます。

iText 7にはPdfImportedPageクラスとColumnTextクラスがないため、このサンプルはiText5とは大きく異なります。

ドキュメントのAcroFieldsが空なのはなぜですか?

フィールドに入力されたPDFフォームがあります。値を変更して保存できます。 しかし、AcroFieldsを読み込もうとすると、空っぽです。

フィールドを読み取るにはどうすればよいですか?

2014年4月7日にGregorGlinkaがStackOverflowに投稿しました。

明らかにPDFが壊れています。 フィールドはページレベルでウィジェット注釈として定義されますが、 ドキュメントルートレベルで設定された/ AcroFormフィールドでは参照されません。

次のコードサンプルを使用して、iText7でPDFを修正できます。

フォームの作成に使用されたツールの作成者に、PDFがPDFリファレンスに準拠していないことを通知する必要があります。

PdfSmartCopyを使用して複数のPDFを連結しながら空白ページを追加する方法は?

膨大な数のPDFファイルを連結して印刷可能なファイルを作成する場合、1つずつ印刷する必要はありません。 印刷用ファイルは両面である必要があり、1ページしかないドキュメントの場合は、 ドキュメントの「裏側」に空白のページを追加する必要があります。

PdfSmartCopyを使ってファイルを連結する際に、白紙ページを追加する方法はありますか? PdfWriterは空白のページを簡単に追加できることは知っていますが、多数のファイルを結合するために作成されたものではないため、使用していません。 「Javaの既存のPDFに空白ページを追加するにはどうすればよいですか?」という質問に対する回答を読みました。 しかし、この場合小さいファイルサイズが必要なためPdfStamperも使用できず、PdfSmartCopyが唯一の実行可能なオプションであると思われます。

2014年1月30日にStackOverflowに投稿されました。

参照した質問への答えでは、PdfDocumentを使用して既存のPDFに空白のページを挿入する方法を説明しました。

iText 7にはPdfCopyクラスとPdfSmartCopyクラスはなく、ドキュメントの結合はcopyPagesTo (int pageFrom、int pageTo、PdfDocument toDocument)を使用して行われます。 スマートモードは、PdfWriterクラスのsetSmartMode(true)メソッドを介して設定されます。 PdfDocumentのインスタンスと数行のコードが必要になります。

ページサイズをカスタマイズする必要がない場合は、次を使用できます。

この場合、iTextはドキュメントのデフォルトのページサイズを取得します。