5

既存のPDFページ内のテキストを別の位置にシフト/移動する方法はありますか?

領域x=100、y = 100、w = 100、h = 100にテキストがあり、それをx = 50、y = 200、w = 100、h=100に移動したいように。

私はたくさんの研究をしましたが、それはiTextSharpできないようです。PDFSharpそれはできると主張しているが、私は例を見つけることができなかった。

1つの方法は、シフトしたいテキストの特定の領域のビットマップを作成し、その領域に白い長方形を描画して、新しい場所にビットマップを挿入することです。各ページを変更する必要がある1,000ページを超える大きなPDFファイルを処理するため、このソリューションは使用したくありません。

私が見つけたのは、テキスト配置演算子(テキストマトリックスとテキスト状態パラメーター)を変更する方法を見つける必要があるということです。これはそれほど単純ではありません。

誰かアイデアはありますか?

4

3 に答える 3

7

すべてのPDFファイルが同じアプリケーションからの単純な(複雑ではない)ものであれば、それは可能だと思います。
たとえば、ユーザーがファイルをアップロードできるWebサイトでこれが必要な場合は、忘れてください。PDFファイルで完全に機能するソリューションは得られません。

PDFsharpは役に立ちますが、AFAIKPDFsharpは必要なものの半分しか実行しません。PDFsharpは、PDFファイルを構成するブロックを提供します。ブロックを解析して描画手順を見つけ、位置を確認して、それらを再配置する必要があります。
一部のアプリケーションは単語を描画しないため、「Hello」などの単純な単語を3つのチャンク(「He」、「ll」、「o」など)で描画できます。これに注意を払う必要があるかもしれません。すべてのファイルが同じアプリケーションからのものである場合はそうではないかもしれません。

テキストを抽出するためにここに示されているコードが役立つと思います:http:
//forum.pdfsharp.net/viewtopic.php
?p = 4010#p4010 テキストを再配置するには、最初にテキストを見つける必要があります-多くの追加作業まだ必要です...

于 2012-02-06T14:34:55.290 に答える
1

Page.Contents.Elements.RemoveAt(8)を使用してオブジェクトを削除できます。Pag​​e.Contents.Elements.Countをチェックして、要素数を検証します。

各要素の文字列値を取得できます(文字列の検証を行うため)。次のようにデータをフェッチできます。

public static string GetElementStream(PdfPage page, int elementIndex)
    {
        string strStreamValue;
        byte[] streamValue;
        strStreamValue = "";

        if (page.Contents.Elements.Count >= elementIndex)
        {
            PdfDictionary.PdfStream stream = page.Contents.Elements.GetDictionary(elementIndex).Stream;
            streamValue = stream.Value;

            foreach (byte b in streamValue)
            {
                strStreamValue += (char)b;
            }
        }
        return strStreamValue;
    }
于 2013-04-25T05:37:56.960 に答える
-1

または、新しい場所に描画して読み取り専用のテキストフォームを作成することもできます

于 2012-02-05T10:32:43.630 に答える