更改或移动PDF文件中的文本位置

时间:2012-12-31 13:33:43

标签: .net c#-4.0 pdf

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

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

我想改变pdf上文本对象的y位置,这个操作将针对许多文件进行,我不想使用任何中间过程,如转换为svg或word,我想要直接修改到pdf文件。

我检查了一些像PdfSharp,iTextSharp,PDFLibNet,Amyuni,pdfclown这样的库,我找不到解决这个问题的方法。

2 个答案:

答案 0 :(得分: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;
    }
    
  3. 我希望这对那些遇到同样问题的人有所帮助。

答案 1 :(得分:0)

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