作成日: 2026/10/01 最終更新日: 2026/10/01
文書種別
不具合
状況
回避方法あり
詳細
PDF内部にTJ配列を含み、かつ複数のフォントを使用しているPDFを読み込んだ後、DrawPdfPageメソッドを使用して任意のページを再描画し、その後Redactメソッドで墨消し注釈を適用すると、例外が発生する場合があります。
本現象は、DrawPdfPageメソッドの内部処理に問題があり、PDFを再描画する際にPDF内部のTJ配列(※1)が正しく再作成されないことが原因です。
その結果、Redactメソッドの実行時に不正なTJ配列情報へアクセスしてしまい、例外が発生します。
(※1)TJ配列:
PDFのテキスト描画で使用されるオブジェクトです。描画する文字列に加え、文字間隔や文字位置の調整情報などが含まれています。
回避方法
元のページに注釈が含まれていない場合は、DrawPdfPageメソッドの代わりにDrawFormメソッドを使用することで回避可能です。
// PDF ドキュメントを作成
GcPdfDocument doc = new GcPdfDocument();
doc.Load("sample.pdf");
GrapeCity.Documents.Pdf.Page oldPage = doc.Pages[0];
const int scalingPercent = 150;
SizeF scaledSize = new SizeF(
oldPage.Size.Width * (scalingPercent / 100.0f),
oldPage.Size.Height * (scalingPercent / 100.0f));
Page newPage = doc.Pages.Insert(doc.Pages.Count, scaledSize);
var xObj = new FormXObject(doc, oldPage);
// 追加ページのサイズに合わせて描画する
newPage.Graphics.DrawForm(
xObj,
newPage.MediaBox,
null,
ImageAlign.ScaleImage);