Skip to content

Commit

Permalink
show message when getting the BoundingBox fafils
Browse files Browse the repository at this point in the history
  • Loading branch information
abenori committed Nov 6, 2015
1 parent 11b7cc5 commit 88c3a06
Show file tree
Hide file tree
Showing 9 changed files with 65 additions and 58 deletions.
4 changes: 4 additions & 0 deletions CUIOutput.cs
Expand Up @@ -39,6 +39,10 @@ class CUIOutput : IOutputController {
Console.WriteLine(filePath + "\nが他のアプリケーション開かれているため生成できませんでした。\nこのファイルを開いているアプリケーションを閉じて再試行してください。");
}

public void showError(string msg) {
Console.WriteLine(msg);
}

public bool askYesorNo(string msg) {
Console.WriteLine(msg + "(y/n)");
while(true) {
Expand Down
65 changes: 35 additions & 30 deletions Converter.cs
Expand Up @@ -163,37 +163,42 @@ class Converter : IDisposable {
}

List<BoundingBoxPair> readPDFBox(string inputPDFFileName, List<int> pages, string boxname) {
using (var mupdf = new MuPDF(Path.Combine(GetToolsPath(), "mudraw.exe"))) {
if (controller_ != null) controller_.appendOutput("Getting the size of PDFBox...\n");
var rv = new List<BoundingBoxPair>();
var doc = (int)mupdf.Execute("open_document", typeof(int), Path.Combine(workingDir, inputPDFFileName));
if (doc == 0) return null;
foreach(var p in pages) {
var page = (int)mupdf.Execute("load_page", typeof(int), doc, p - 1);
var media = (BoundingBox)mupdf.Execute("pdfbox_page", typeof(BoundingBox), page,"media");
var box = (BoundingBox)mupdf.Execute("pdfbox_page", typeof(BoundingBox), page, boxname);
var rotate = (int)mupdf.Execute("rotate_page", typeof(int), page);
BoundingBox bb;
switch (rotate) {
default:
case 0:
bb = new BoundingBox(box.Left - media.Left, box.Bottom - media.Bottom, box.Right - media.Left, box.Top - media.Bottom);
break;
case 90:
bb = new BoundingBox(box.Bottom - media.Bottom, media.Right - box.Right, box.Top - media.Bottom, media.Right - box.Left);
break;
case 180:
bb = new BoundingBox(media.Right - box.Right, media.Top - box.Top, media.Right - box.Left, media.Top - box.Bottom);
break;
case 270:
bb = new BoundingBox(media.Top - box.Top, box.Left - media.Left, media.Top - box.Bottom, box.Right - media.Left);
break;
try {
using (var mupdf = new MuPDF(Path.Combine(GetToolsPath(), "mudraw.exe"))) {
if (controller_ != null) controller_.appendOutput("Getting the size of PDFBox...\n");
var rv = new List<BoundingBoxPair>();
var doc = (int)mupdf.Execute("open_document", typeof(int), Path.Combine(workingDir, inputPDFFileName));
if (doc == 0) return null;
foreach (var p in pages) {
var page = (int)mupdf.Execute("load_page", typeof(int), doc, p - 1);
var media = (BoundingBox)mupdf.Execute("pdfbox_page", typeof(BoundingBox), page, "media");
var box = (BoundingBox)mupdf.Execute("pdfbox_page", typeof(BoundingBox), page, boxname);
var rotate = (int)mupdf.Execute("rotate_page", typeof(int), page);
BoundingBox bb;
switch (rotate) {
default:
case 0:
bb = new BoundingBox(box.Left - media.Left, box.Bottom - media.Bottom, box.Right - media.Left, box.Top - media.Bottom);
break;
case 90:
bb = new BoundingBox(box.Bottom - media.Bottom, media.Right - box.Right, box.Top - media.Bottom, media.Right - box.Left);
break;
case 180:
bb = new BoundingBox(media.Right - box.Right, media.Top - box.Top, media.Right - box.Left, media.Top - box.Bottom);
break;
case 270:
bb = new BoundingBox(media.Top - box.Top, box.Left - media.Left, media.Top - box.Bottom, box.Right - media.Left);
break;
}
if (controller_ != null) controller_.appendOutput(bb.ToString() + "\n");
rv.Add(new BoundingBoxPair(bb.HiresBBToBB(), bb));
}
if (controller_ != null) controller_.appendOutput(bb.ToString() + "\n");
rv.Add(new BoundingBoxPair(bb.HiresBBToBB(), bb));
if (controller_ != null) controller_.appendOutput("\n");
return rv;
}
if (controller_ != null) controller_.appendOutput("\n");
return rv;
}
catch (Exception) {
return null;
}
}

Expand Down Expand Up @@ -984,7 +989,7 @@ class Converter : IDisposable {
bbs = readPDFBB(tmpFileBaseName + ".pdf", 1, page);
}
if (bbs == null) {
controller_.appendOutput("BoundigBox の取得に失敗しました.");
controller_.showError("BoundigBox の取得に失敗しました.");
return false;
}

Expand Down
1 change: 1 addition & 0 deletions IOutputController.cs
Expand Up @@ -15,6 +15,7 @@ interface IOutputController
void scrollOutputTextBoxToEnd();
void showUnauthorizedError(string filePath);
void showIOError(string filePath);
void showError(string msg);
bool askYesorNo(string msg);
void showToolError(string tool);
void errorIgnoredWarning();
Expand Down
4 changes: 4 additions & 0 deletions MainForm.cs
Expand Up @@ -240,6 +240,10 @@ public partial class MainForm : Form, IOutputController {
MessageBox.Show(filePath + "\nが他のアプリケーション開かれているため生成できませんでした。\nこのファイルを開いているアプリケーションを閉じて再試行してください。", "画像生成失敗", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

public void showError(string msg) {
MessageBox.Show(msg, "TeX2img");
}

public bool askYesorNo(string msg) {
return (MessageBox.Show(msg, "TeX2img", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes);
}
Expand Down
3 changes: 3 additions & 0 deletions TeX2img.txt
Expand Up @@ -296,3 +296,6 @@ https://code.google.com/p/pdfium/
* 1.6.7
- /load-defaults すると /timeout が 0.01 秒に設定されてしまっていたバグを修正.
- PDF の Box の取得を,pdftex から MuPDF によるものに変更.さらに回転を考慮するようにした.
- PDF 結合を PDFium で行うようにした.
- MuPDF で注釈を追加したファイルにさらに Ghostscript をかけていたのをやめた.

33 changes: 7 additions & 26 deletions TeXSource.cs
Expand Up @@ -51,7 +51,10 @@ public static class TeXSource {
public static void EmbedSource(string file, string text) {
// 拡張子毎の処理(あれば)
var ext = Path.GetExtension(file);
if (ExtraEmbed.ContainsKey(ext)) ExtraEmbed[ext](file, text);
if (ExtraEmbed.ContainsKey(ext)) {
try { ExtraEmbed[ext](file, text); }
catch (Exception e) { System.Diagnostics.Debug.WriteLine(e.Data); }
}

// Alternative Data Streamにソースを書き込む
try {
Expand Down Expand Up @@ -93,7 +96,7 @@ public static class TeXSource {
{ ".pdf",PDFRead },
};

static void PDFEmbed(string file,string text) {
static void PDFEmbed(string file, string text) {
var tmpdir = Path.GetTempPath();
var tmp = TempFilesDeleter.GetTempFileName(".pdf", tmpdir);
tmp = Path.Combine(tmpdir, tmp);
Expand All @@ -111,30 +114,8 @@ public static class TeXSource {
mupdf.Execute("write_document", doc, tmp);
}
if (File.Exists(tmp)) {
using(var proc = new System.Diagnostics.Process()) {
var tmp2 = TempFilesDeleter.GetTempFileName(".pdf", tmpdir);
tmp_deleter.AddFile(tmp2);
proc.StartInfo.FileName = Path.Combine(Converter.GetToolsPath(), "pdfiumdraw.exe");
proc.StartInfo.Arguments = "--pdf --output=\"" + tmp2 + "\" \"" + tmp + "\"";
proc.StartInfo.WorkingDirectory = tmpdir;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.ErrorDataReceived += (s,e) => System.Diagnostics.Debug.WriteLine(e.Data);
proc.OutputDataReceived += (s,e) => System.Diagnostics.Debug.WriteLine(e.Data);
proc.Start();
proc.BeginOutputReadLine();
proc.BeginErrorReadLine();
proc.WaitForExit(1000);
if (!proc.HasExited) proc.Kill();

tmp2 = Path.Combine(tmpdir, tmp2);
if (File.Exists(tmp2)) {
File.Delete(file);
File.Move(tmp2, file);
}
}
File.Delete(file);
File.Move(tmp, file);
}
}
}
Expand Down
1 change: 1 addition & 0 deletions UnitTest/ConverterTest.cs
Expand Up @@ -482,6 +482,7 @@ struct Size {
public void showIOError(string filePath) { Debug.WriteLine("showIOError: filePath = " + filePath); }
public void showToolError(string tool) { Debug.WriteLine("showToolError: tool = " + tool); }
public void errorIgnoredWarning() { Debug.WriteLine("errorIgnoredWarning"); }
public void showError(string msg) { Debug.WriteLine("showError: msg = " + msg); }
public bool askYesorNo(string msg) {
Debug.WriteLine("askYesorNo: msg = \n" + msg);
return true;
Expand Down
8 changes: 8 additions & 0 deletions mudraw/Interactive.cpp
@@ -1,8 +1,16 @@
/*
コンパイル:SumatraPDFのソースを使っている.
mudrawにパッチを当てる.
SumatraPDFソースツリー内,pdf-write.cのwritexref内の
fprintf(opts->out, "\n");
を消す.
Interactive.cppとInteractive.hを入れる.
二つの言語をC++にして,例外を有効にする.
適当に警告をエラー扱いするのをやめる.
*/

Expand Down
4 changes: 2 additions & 2 deletions mudraw/Interactive.h
Expand Up @@ -270,7 +270,7 @@ namespace mudraw {
auto media = GetMediaBox(p);
fz_rect rect;
::pdf_to_rect(context, pdf_lookup_inherited_page_item(p.document, p.page->me, "CropBox"), &rect);
if(fz_is_empty_rect(&rect))return media;
if(::fz_is_empty_rect(&rect))return media;
else{
::fz_intersect_rect(&rect, &media);
return rect;
Expand All @@ -279,7 +279,7 @@ namespace mudraw {
fz_rect GetOtherBox(Page &p, const char *boxname){
fz_rect rect;
::pdf_to_rect(context, pdf_lookup_inherited_page_item(p.document, p.page->me, boxname), &rect);
if(fz_is_empty_rect(&rect))return GetCropBox(p);
if(::fz_is_empty_rect(&rect))return GetCropBox(p);
else{
auto media = GetMediaBox(p);
::fz_intersect_rect(&rect, &media);
Expand Down

0 comments on commit 88c3a06

Please sign in to comment.