从使用LaTeX创建的PDF中,如何检索使用LaTeX绘制的图像?

时间:2015-10-04 02:11:17

标签: c# image pdf latex

从使用LaTeX创建的PDF中,如何检索使用LaTeX绘制的图像?

我有从pdf中检索图像的c#代码。不幸的是,它只检索以JPEG,PNG等形式插入PDF的图像。

这是我用于从PDF中提取图像的代码。

class Image_Retriever
{
    public static void retrieve_image(String PDFSourcePath, String pdf_image_extraction_path)
    {
        PdfReader reader = new PdfReader(PDFSourcePath);
        PRStream pst;
        PdfImageObject pio;
        PdfObject po;
        int n = reader.XrefSize; //number of objects in pdf document
        FileStream fs = null;
        try
        {
            for (int i = 0; i < n; i++)
            {
                po = reader.GetPdfObject(i); //get the object at the index i in the objects collection
                if (po == null || !po.IsStream()) //object not found so continue
                    continue;
                pst = (PRStream)po; //cast object to stream
                PdfObject type = pst.Get(PdfName.SUBTYPE); //get the object type
                //check if the object is the image type object
                if (type != null && type.ToString().Equals(PdfName.IMAGE.ToString()))
                {
                    pio = new PdfImageObject(pst); //get the image
                    fs = new FileStream(pdf_image_extraction_path + "image" + i + ".jpg", FileMode.Create);
                    //read bytes of image in to an array
                    byte[] imgdata = pio.GetImageAsBytes();
                    //write the bytes array to file
                    fs.Write(imgdata, 0, imgdata.Length);
                    fs.Flush();
                    fs.Close();
                }
            }


        }
        catch (Exception e) { Console.WriteLine(e.Message); }
    }
}

以上代码无法检索LaTeX绘制的图像。

我听说在使用LaTeX准备pdf文档时,用户可以使用LaTeX在PDF中绘制图像。是否还有代码来检索这些图像?

1 个答案:

答案 0 :(得分:1)

我是LaTeX2HTML的前开发人员。 正如+ SkryptX已经说过的那样,访问postscript级别的对象需要你自己渲染矢量grafics。 最好的方法是让PS完成工作,然后剪切输出流中的图像。 LaTeX2HTML使用工具pstoppm将ps文件转换为ppm(便携式像素图)图像,然后是ppmtogif或ppmtopng。 除ps文件外,您还需要知道要剪辑的图像的边界框大小,这些数据可以从LaTeX源中提取。

现在已经不久了,所以我不能再详细介绍了。 但您可能需要查看l2h源代码并自行评论更多技术问题。