0

通过 .net 应用程序,我想通过向下移动第一行或第一个单词的小空间来修改 pdf 文档。

是否有任何库可以帮助我以编程方式更改 pdf 文档上的某些文本位置?

我想更改 pdf 上文本对象的 y 位置,此操作将对许多文件进行,并且我不想使用任何中间过程,例如转换为 svg 或 word,我想直接修改 pdf文件。

我检查了一些库,如 PdfSharp 、 iTextSharp 、 PDFLibNet 、 Amyuni 、 pdfclown ,但我没有找到解决这个问题的方法。

4

2 回答 2

1

一个多月来研究在 pdf 文件上移动文本对象的解决方案,我检查了许多库,如 [Docotic、pdfclown、iTextSharp、PdfSharp、PDFLibNet、Amyuni、asppdf、PDFTechLib 等],我找到了两个库可以做这个操作

  1. amyuni它的代码很简单,但是在修改位置后我又遇到了另一个问题:图形颜色已更改,
  2. 另一个库是foxitsoftware,这是我如何做到的示例代码。

    public static void Modify(string pdfFile)
    {
        IntPtr pdf_doc = IntPtr.Zero;
        IntPtr pdf_page = IntPtr.Zero;
        TextInfo TxtInfo = null;
        ObjectInfo ObjInfo = null;
        ArrBuf = new ArrayList();
        FPDFView.FPDF_InitLibrary(System.Diagnostics.Process.GetCurrentProcess().Handle);
        FPDFView.FPDF_UnlockDLL("xxxxxx", "xxxxxxxxxxxxxxxxxxxxxxxxxxxx");
        pdf_doc = FPDFLIB.FPDFView.FPDF_LoadDocument(pdfFile, "");
        pdf_page = FPDFView.FPDF_LoadPage(pdf_doc, 0);
    
        IntPtr Page_Obj = FPDFEditBase.FPDFPage_GetObject(pdf_page, 0);
    
    
        FPDFEditBase.FPDFPageObj_Transform(Page_Obj, 1, 0,0, 1, 0, -40);
    
        ObjInfo = new ObjectInfo(pdf_doc, pdf_page, -1);
        ObjInfo.Delete(-1);
    
    
        FPDFLIB.FPDFEditBase.FPDF_FILEWRITE pFileWriter = new FPDFLIB.FPDFEditBase.FPDF_FILEWRITE();
        pFileWriter.wb = new FPDFEditBase.WriteBlock(MyDelegateFunc);
        //FPDFEditBase.FPDF_SaveDocument(pdf_doc, ref pFileWriter, 0, null, 0, null, 0, 0);
        bool flag = FPDFEditBase.FPDF_SaveDocument(pdf_doc, ref pFileWriter, 0, null, 0, null, 0, 0);
        if (flag == false)
            return;
        FileStream fs = new FileStream(pdfFile, FileMode.Create, FileAccess.Write);
        object[] myArr = ArrBuf.ToArray();
        for (int i = 0; i < myArr.Length; i++)
        {
            byte[] mybyte = (byte[])myArr[i];
            fs.Write(mybyte, 0, mybyte.Length);
        }
    
        fs.Close();
        fs.Dispose();
    
        FPDFLIB.FPDFView.FPDF_CloseDocument(pdf_doc);
    
    }
    static ArrayList ArrBuf = new ArrayList();
    
    public static int MyDelegateFunc(ref FPDFEditBase.FPDF_FILEWRITE pThis, IntPtr pData, UInt32 size)
    {
    
        byte[] byteData = new byte[size];
    
        System.Runtime.InteropServices.Marshal.Copy(pData, byteData, 0, (int)size);
        ArrBuf.Add(byteData);
    
        return 1;
    }
    

我希望这对遇到同样问题的其他人有所帮助。

于 2013-01-01T08:18:33.143 回答
0

我认为您可以使用 .NET 的特定 API(例如 iTextSharp)重新编辑 pdf 文件。

于 2012-12-31T13:37:11.870 回答