作成日: 2025/11/13 最終更新日: 2026/03/27
文書種別
不具合
状況
修正済み
詳細
コンテンツストリームにTcが設定されているPDFをDioDocsで読み込み、テキストを追加すると、文字間隔が広くなります。
TcはPDF内部のコマンドの一種であり、文字間隔を指定するものです。
なお、Tcの存在を検知する機能は用意されておらず、問題の発生するPDFを事前に見分ける方法はありません。
回避方法
V9J (9.0.3) で修正済み
※以前の回避方法
ページのコンテンツストリームをMemoryStreamオブジェクトに読み込み、Tcの初期化に対応するバイナリを書き込む方法で回避できます。
この方法は問題の発生していないPDF(ページ)に対して実行しても出力結果に影響しません。
foreach (var page in doc.Pages)
{
using (Stream ps = page.GetStream())
{
MemoryStream nps = new MemoryStream();
CopyStream(ps, nps); //後述のメソッドを呼び出します。
nps.Write([(byte)' ', (byte)'0', (byte)' ', (byte)'T', (byte)'c']);
page.ContentStreams.Clear();
page.SetContent(nps, false);
}
}
//ストリームをコピーするメソッド
static long CopyStream(Stream src, Stream dst)
{
byte[] buffer = new byte[16 * 1024];
int bytesRead;
long result = 0;
while ((bytesRead = src.Read(buffer, 0, buffer.Length)) != 0)
{
dst.Write(buffer, 0, bytesRead);
result += bytesRead;
}
return result;
}※以下の不具合を回避するため、ContentStreams.Clear()を実行しています。
同一コンテンツストリームを複数ページで共有しているPDFでSetContentを使用すると、ページ内容が重複して描画される