0

我正在使用 iText 5 用内容填充现有的 pdf 表单,然后将它们合并到一个 pdf 中。我也想打开/关闭图层,但是合并后所有图层都是可见的。

此代码在不使用现有 pdf 表单的情况下显示了问题。我想隐藏第二层,但它似乎不起作用。

    static void Main(string[] args)
    {
        byte[] pdfPage = CreatePage();
        byte[] result = Merge(new byte[][] { pdfPage, pdfPage });
        File.WriteAllBytes(@"c:\test1.pdf", result);
    }

    private static byte[] CreatePage()
    {
        Document doc = new Document();
        MemoryStream ms = new MemoryStream();
        PdfWriter writer = PdfWriter.GetInstance(doc, ms);
        doc.Open();
        PdfLayer layer1 = new PdfLayer("Layer 1", writer);
        PdfLayer layer2 = new PdfLayer("Layer 2", writer);
        PdfContentByte cb = writer.DirectContent;
        cb.BeginLayer(layer1);
        ColumnText.ShowTextAligned(cb, Element.ALIGN_LEFT, new Phrase("Layertext 1"), 100, 700, 0);
        cb.EndLayer();
        cb.BeginLayer(layer2);
        ColumnText.ShowTextAligned(cb, Element.ALIGN_LEFT, new Phrase("Layertext 2"), 100, 600, 0);
        cb.EndLayer();
        layer1.On = true;
        // turn off layer 2
        layer2.On = false;
        doc.Close();
        return ms.ToArray();
    }

    private static byte[] Merge(byte[][] pages)
    {
        Document doc = new Document();
        MemoryStream ms = null;
        using (ms = new MemoryStream())
        {
            PdfCopy copy = new PdfCopy(doc, ms);
            doc.Open();
            foreach (byte[] page in pages)
            {
                PdfReader reader = new PdfReader(new MemoryStream(page));
                PdfImportedPage imp = copy.GetImportedPage(reader, 1);
                copy.AddPage(imp);
                reader.Close();
            }
            doc.Close();
        }
        return ms.ToArray();
    }
4

0 回答 0