我使用iText 7将pdf页面转换为图像(从扫描文档转换为图像),这样我就可以用ocr处理它。对于某些pdf文件,这工作得非常好,但对于其他文件,“提取”的图像返回90度旋转!
考虑到这些文档可以很好地工作:我打开word,输入一些文本和图片,然后将文件转换为pdf。当使用iText 7处理此类文件时,我可以毫无问题地输出文本和图像!
考虑到导致问题的文档:我扫描一封信,并将一个PDF文件X发送到我的电子邮件。X只有一个图像层。如果我用iText 7解析X,并从字节数组中创建一个新图像(使用事件类型的EventListenerRender_IMAGE),图像将以90度旋转创建???
所以对于这两个文档,我使用相同的c#代码,但输出不同...
我使用了X的输出图像(带有旋转的图像)并将其转换为pdf文件。让我们称之为Y。因此,当我再次从Y创建图像时,新图像与Y相比不会旋转我只是做了个测试,看看图像是否会一直旋转。。。
//IEventListener的实现:
public void EventOccurred(IEventData data, EventType type)
{
switch (type)
{
case EventType.RENDER_IMAGE:
String filename;
ImageRenderInfo renderInfo = (ImageRenderInfo)data;
PdfImageXObject image = renderInfo.GetImage();
if (image == null)
{
return;
}
byte[] imageBytes = image.GetImageBytes(true);
extension = image.IdentifyImageFileExtension();
filename = String.Format(@"{0}\{1}.{2}", path, Guid.NewGuid().ToString(), extension);
images.Add(new ImageStreamObject(imageBytes, filename));
break;
}
}
//类ImageStreamObject
public class ImageStreamObject
{
byte[] image;
string path;
/// <summary>
/// Creates a data object for storing an image as a byte array and its filepath.
/// </summary>
/// <param name="byteArray"></param>
/// <param name="filePath"></param>
public ImageStreamObject(byte[] byteArray, string filePath)
{
image = byteArray;
path = filePath;
}
public String GetImagePath()
{
return path;
}
//执行图像"提取"的对象的构造函数:
public PdfImageExtractor(string filePath, string imageOutputPath)
{
pdf = new PdfDocument(new PdfReader(filePath));
listener = new ImageRenderListener(imageOutputPath);
parser = new PdfCanvasProcessor(listener);
imageBuffer = new List<string>();
}
//方法从PdfImageExtractor创建图像文件:
public List<string> CreateImagesFromPdfPage(int page)
{
FileStream fs;
byte[] tempImage;
string tempPath;
listener.GetImageStreamObjects().Clear();
parser.ProcessPageContent(pdf.GetPage(page));
imageStreamObjects = listener.GetImageStreamObjects();
List<string> pathes = GetImagePathes();
imageStreamObjects.ForEach(delegate (ImageStreamObject imageStreamObject)
{
tempPath = imageStreamObject.GetImagePath();
tempImage = imageStreamObject.GetImageAsByteArray();
fs = new FileStream(tempPath, FileMode.Create);
fs.Write(tempImage, 0, tempImage.Length);
fs.Flush();
fs.Close();
});
return pathes;
}
您提取的位图图像与它存储在PDF中的资源完全一样(至少在方向方面)。但是每当绘制位图资源时,它在绘制时受制于当前转换矩阵,并且当前转换可以显著地旋转、倾斜、平移和拉伸位图。
在从ImageRenderInfo renderInfo
绘制位图时,可以使用
Matrix ctm = renderInfo.GetImageCtm();
并分析它。此外,您必须考虑页面旋转,您可以从页码页
中检索
int rotation = pdf.GetPage(page).GetRotation()
假设我有这样的多维数组:
我明白扫描仪有什么好处,也明白什么时候使用扫描仪,什么时候使用Bufferedreader。我读到了一个不同的,但在一些类似的问题扫描器vs.BufferedReader null
问题内容: 我想找出悬停时如何制作 旋转或旋转的图像 。我想知道如何在以下代码上使用 CSS 模仿该功能: 问题答案: 您可以将CSS3过渡与一起使用,以 在悬停时旋转图像 。 旋转图像:
我有一个图像视图和一个按钮,我想要什么,当我点击按钮我想旋转图像视图10度。请帮帮我。 下面是我使用的代码
本文向大家介绍写一个算法,可以将一个二维数组顺时针旋转90度,说一下思路。相关面试题,主要包含被问及写一个算法,可以将一个二维数组顺时针旋转90度,说一下思路。时的应答技巧和注意事项,需要的朋友参考一下 考察点:数组
在我的应用程序中,我需要从相机加载图像。 这是我使用的代码: 但是如果我从图库中加载图片,它可以正常工作。 这里有什么错误?谢啦