private void button1_Click(object sender, EventArgs e)
{
//pdfファイルを開く
PdfReader reader = new PdfReader(this.textBox1.Text);
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
//保存先を作る
Directory.CreateDirectory(System.IO.Path.GetDirectoryName(this.textBox1.Text) + "\\" + System.IO.Path.GetFileNameWithoutExtension(this.textBox1.Text));
//ページ数分ループ
int pageNum = reader.NumberOfPages;
for (int i = 1; i <= pageNum; i++)
{
iTextSharp.text.pdf.parser.RenderListener listener = new MyRenderListener(i);
parser.ProcessContent(i, listener);
}
//終了処理
reader.Close();
MessageBox.Show("完了しました");
}
// 拡張メソッド
public static void ExtractTextAndImages(this PdfDocument document, string filename, string outputPath)
{
// ページ全体を切り取り
document.ExtractTextAndImagesByPage(filename, outputPath, (i) => true);
}
// ページごとに指定する
public static void ExtractTextAndImagesByPage(this PdfDocument document, string filename, string outputPath,
Func<int, bool> isExtractPage)
{
for (int i = 0; i < document.NumberOfPages; i++)
{
var page = document.GetPage(i);
if (isExtractPage(i))
{
// 文字列の抽出
var text = page.ExtractText();
// 画像の抽出
page.ExtractImages(filename, outputPath, i);
}
}
}
//
using (var pdfDocument = PdfReader.Open("input.pdf", PdfDocumentOpenMode.ReadOnly))
{
for (var i = 0; i < pdfDocument.PageCount; i++)
{
var page = pdfDocument.Pages[i];
var images = page.GetImages()
.Where(x => x.ColorSpace.Name == "DeviceGray" || x.ColorSpace.Name == "DeviceCMYK");
foreach (var image in images)
{
using (var pngStream = new MemoryStream())
{
var png = Image.GetInstance(image);
png.Save(pngStream, ImageFormat.Png);
var content = new Content()
{
FileName = $"{i}_{image.GetHashCode()}.png",
ContentType = "image/png",
Content = pngStream.ToArray()
};
yield return content;
}
}
}
}
using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Text;
using Microsoft.Win32;
using System.Threading.Tasks;
using System.Numerics;
using System.Runtime.InteropServices;
using System.Threading;
using System.Collections.Concurrent;
using System.Diagnostics;
using System.Reflection;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;
using System.Net;
using System.Security.Cryptography;
using System.Runtime.Serialization.Json;
using System.Runtime.Serialization;
using System.Net.Mail;
using System.Net.Mime;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices
// カラーモードの設定
colormode = 2; // 2 = "RGB", 3 = "CMYK"
// ルートの取得
var root = this.extractPages(0);
// ページの取得
var page = root.extractPages(0);
// ページの画像を取得
var img = page.getImages();
// 画像の色モードを設定
for (var i = 0; i < img.length; i++) {
img[i].colorspace = colormode;
}
// ページを保存
page.flatten();
page.saveAs("[Insert PDFFolderPath Here]");
private void button1_Click(object sender, EventArgs e) {
...
}
for(int i=0; i< pdf.numPages; i++){
PdfPage page = pdf.getPage(i);
PdfReaderContentParser parser = new PdfReaderContentParser(pdf);
PdfContentStreamProcessor processor = new PdfContentStreamProcessor(parser);
processor.processContent(i, page.getContents().getStreamBytes());
PdfDictionary pageDictionary = page.getAsDictionary(PdfName.RESOURCES);
PdfDictionary xObjectDictionary = pageDictionary.getAsDictionary(PdfName.XOBJECT);
for(PdfName key : xObjectDictionary.getKeys()){
PdfObject pdfObject = xObjectDictionary.get(key);
if(pdfObject.isIndirect()){
PdfDictionary imageDictionary = (PdfDictionary)PdfReader.getPdfObject(pdfObject);
PRStream stream = (PRStream)imageDictionary.get(PdfName.XOBJECT);
PdfImageObject image
// ファイルを開く(PDF)
PdfDocument doc = PdfReader.Open(filePath);
// 全ページのPdfPageオブジェクトを取得する
var pagesInDoc = doc.Pages;
// 全ページのPdfPageオブジェクトをMatオブジェクトに変換
var mats = pagesInDoc
.Select(page =>
{
// PdfPageオブジェクトからXGraphicsオブジェクトを生成
using (XGraphics gfx = XGraphics.FromPdfPage(page))
{
// XGraphicsオブジェクトからXImageオブジェクトを生成
XImage image = XImage.FromGdiPlusImage(gfx.GetBitmap());
return image.ToBitmap();
}
})
.Select(BitmapToMat)
.ToArray();
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;
using OpenCvSharp.Extensions;
using OpenCvSharp.UserInterface;
namespace OpenCVsharp4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//漫画のデーターを読み取ります。
Mat image = new Mat(@"C:\Users\Yamada\Pictures\test.jpg", ImreadModes.Color);
//Mat image = new Mat(@"C:\Users\Yamada\Pictures\test.pdf", ImreadModes.Color);
//Mat image = new Mat(
void printPdf(string fileName)
{
ProcessStartInfo info = new ProcessStartInfo();
info.Verb = "print";
info.FileName = fileName;
info.CreateNoWindow = true;
info.WindowStyle = ProcessWindowStyle.Hidden;
Process p = new Process();
p.StartInfo = info;
p.Start();
p.WaitForInputIdle();
System.Threading.Thread.Sleep(3000);
if (false == p.CloseMainWindow())
p.Kill();
}
public void SaveAsPng(string fileName, string filePath)
{
// PDFファイルから文字画像だけを切り取り、ファイルに保存する。
// ファイルパスは、出力先を指定する。
// ファイル名は、自動的に「_1」から順番に割り振られる。
var pdf = new PdfDocument(fileName);
pdf.SaveAsPng(filePath);
}