如何从原始分辨率和格式中提取pdf文档中的所有图像?(意思是提取tiff为tiff,jpeg为jpeg等,无需重新采样).布局是不重要的,我不在乎是源图像位于页面上.
我正在使用python 2.7,但如果需要可以使用3.x.
我正在使用iText提取嵌入的图像并将它们保存为单独的文件..jpg和.png文件出来了,但我无法提取具有CCITTFaxDecode编码的tiff图像.
有没有人有办法保存tiff文件?
我发现了一些使用iTextSharp的样本C#代码,用/ CCITTFaxDecode过滤器从PDF中 提取图像 它表示需要一个单独的tiff库来写出结果.根据那篇文章,"CCITTFaxDecode"压缩是针对tiff库的Compression.CCITTFAX4.
要使用该文章的方法,我需要:1.获取一个tiff库.Java Image I/O API允许您以其他格式读取和写入TIFF文件.BufferedImage image = ImageIO.read(new File("image.tif"));
在这个问题的答案中:c ++解码pdfs中的CCITT编码图像
需要指出的是,libtiff可用于解码CCITT编码的图像.当然,我们必须预先添加一个TIFF标头,以使CCITT流成为有效的TIFF文件.
但是,PDF文件中的某些图像是内嵌图像,虽然给出了宽度,高度和位深度,但未给出它们的长度.读取PDF的程序应该解码CCITT流,读取(宽度*高度*深度)位的解码数据,以及读取数据后的任何位置,这是内联图像的结束.然后它应该继续下一页标记命令,依此类推.
这带来了一个问题.TIFF图像文件目录必须指定图像数据的每个条带中有多少字节,但在我们解码之前我们不知道编码数据的实际属于多少字节,但我们不能不使用libtiff解码图像...
有没有办法在这里使用libtiff或我们需要自定义CCITT过滤器代码?
我想从PDF文件中提取图像.我尝试使用以下代码,它从PDF中完美地提取了一个jpeg图像.问题是如何从特定页面(例如第1页)或从其他页面中提取图像.我不想阅读整个PDF来搜索图像.
有什么建议?
提取图像的代码:
private void List<System.Drawing.Image> ExtractImages(String PDFSourcePath)
{
List<System.Drawing.Image> ImgList = new List<System.Drawing.Image>();
iTextSharp.text.pdf.RandomAccessFileOrArray RAFObj = null;
iTextSharp.text.pdf.PdfReader PDFReaderObj = null;
iTextSharp.text.pdf.PdfObject PDFObj = null;
iTextSharp.text.pdf.PdfStream PDFStremObj = null;
try
{
RAFObj = new iTextSharp.text.pdf.RandomAccessFileOrArray(PDFSourcePath);
PDFReaderObj = new iTextSharp.text.pdf.PdfReader(RAFObj, null);
for (int i = 0; i <= PDFReaderObj.XrefSize - 1; i++)
{
PDFObj = PDFReaderObj.GetPdfObject(i);
if ((PDFObj != null) && PDFObj.IsStream())
{
PDFStremObj = (iTextSharp.text.pdf.PdfStream)PDFObj;
iTextSharp.text.pdf.PdfObject subtype = PDFStremObj.Get(iTextSharp.text.pdf.PdfName.SUBTYPE);
if ((subtype != null) && subtype.ToString() == iTextSharp.text.pdf.PdfName.IMAGE.ToString())
{
byte[] …Run Code Online (Sandbox Code Playgroud)