0

階層化されていない PDF ファイルと階層化された PDF ファイルを受け取るプロセスがあります。階層化されていない PDF ファイルについては、「カット」という名前のレイヤーを追加します。レイヤー化された PDF ファイルの場合、「カット」という名前のレイヤーが既に存在するかどうかを確認する必要があります。存在する場合は、「カット」レイヤーを追加しないでください。ABCPDF 8 を使用して、PDF 内のすべてのレイヤーの名前を取得して、「カット」という名前のレイヤーがあるかどうかを判断するにはどうすればよいですか?

4

3 に答える 3

2

iTextSharp には、レイヤーの名前を取得する簡単な方法があることがわかりました。これを行う方法に関するコードのスニペットを次に示します。

tempOutputFile = System.IO.Path.GetTempFileName();
iTextSharp.text.pdf.PdfReader pdfReader = new iTextSharp.text.pdf.PdfReader(pdfFile);

iTextSharp.text.pdf.PdfStamper pdfStamper = new iTextSharp.text.pdf.PdfStamper(pdfReader, new System.IO.FileStream(tempOutputFile, System.IO.FileMode.Create));

System.Collections.Generic.Dictionary<string, iTextSharp.text.pdf.PdfLayer> layers = pdfStamper.GetPdfLayers();

pdfStamper.Close();
pdfReader.Close();

System.IO.File.Delete(tempOutputFile);

レイヤー ディクショナリのキーは、レイヤーの名前です。そのように簡単!

于 2013-08-13T12:38:46.960 に答える
0

ABCpdf バージョン 10 には、これを行う方法を示す OCGLayers というプロジェクトが含まれています。

たとえば、すべての名前付きレイヤーを取得するには、次の形式のコードを使用します。

        Page page = ... get a page ...
        List<Group> groups = oc.GetGroups(page);
        List<int> indents = new List<int>();
        oc.SortGroupsForPresentation(groups, indents);
        for (int i = 0; i < groups.Count; i++) {
            Group group = groups[i];
            string indent = new string(' ', indents[i] * 3);
            layersCheckedListBox.Items.Add(indent + group.EntryName.Text, group.Visible);
        }

このプロジェクトには、レイヤーを編集する方法を示すコードも含まれています。これは、説明したタスクを考えると役立つ場合があります。

于 2015-05-18T14:58:29.867 に答える