From 3b2e2b8c13a309cc614041a141d8ad77eeb24bbc Mon Sep 17 00:00:00 2001 From: Maksym Tkachuk Date: Thu, 5 Mar 2026 12:14:23 +0200 Subject: [PATCH] added supports for new version of MuPDF 1.27.2 --- CHANGELOG.md | 5 + Demo/Program.cs | 20 ++ Demo/TestDocuments/Jbig2.pdf | Bin 0 -> 131376 bytes MuPDF.NET.Test/DisposePatternTest.cs | 119 ++++++++ .../resources/test_1645_expected.pdf | Bin 2680 -> 2680 bytes MuPDF.NET/DeviceWrapper.cs | 5 +- MuPDF.NET/DisplayList.cs | 5 +- MuPDF.NET/Document.cs | 190 +++++++----- MuPDF.NET/DocumentWriter.cs | 5 +- MuPDF.NET/Font.cs | 4 +- MuPDF.NET/GraftMap.cs | 5 +- MuPDF.NET/MuPDF.NET.csproj | 2 +- MuPDF.NET/MuPDF.NET.nuspec | 6 +- MuPDF.NET/Page.cs | 2 +- MuPDF.NET/Pixmap.cs | 15 +- MuPDF.NET/Story.cs | 4 +- MuPDF.NET/TextPage.cs | 2 +- MuPDF.NET/build/net4/MuPDF.NET.targets | 8 +- MuPDF.NET/mupdf_linux.cs | 270 ++++++++++++++++++ MuPDF.NET/mupdf_windows.cs | 270 ++++++++++++++++++ MuPDF.NET/structures/Outline.cs | 5 +- 21 files changed, 847 insertions(+), 95 deletions(-) create mode 100644 Demo/TestDocuments/Jbig2.pdf create mode 100644 MuPDF.NET.Test/DisposePatternTest.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index ab987089..4011f8b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +### [3.2.13-rc.14] - 2026-02-11 +- Upgraded `MuPDF.NativeAssets` to 1.27.2 and refreshed generated MuPDF bindings for Windows and Linux. +- Implemented `IDisposable` on core types (`Document`, `Page`, `TextPage`, `Story`, `DocumentWriter`, `DisplayList`, `Font`, `GraftMap`, `DeviceWrapper`, `Outline`) and made `Document.Dispose()` idempotent. +- Hardened native resource handling (e.g. `Document.Convert2Pdf`, `Pixmap.InvertIrect`) to be exception-safe, fixed `Pixmap.InvertIrect` null/stencil handling, and added tests for table extraction and disposal patterns. + ### [3.2.13-rc.6] - 2025-12-26 - Fixed the issues in `ResolveNames` method. - Fixed the issues in `DrawShape` diff --git a/Demo/Program.cs b/Demo/Program.cs index 51d7105a..19fcedfa 100644 --- a/Demo/Program.cs +++ b/Demo/Program.cs @@ -84,10 +84,30 @@ static void Main(string[] args) TestTable(); TestGetText(); TestMarkdownReader(); + TestRecompressJBIG2(); return; } + static void TestRecompressJBIG2() + { + Console.WriteLine("\n=== TestJBIG2 ======================="); + + string testFilePath = Path.GetFullPath("../../../TestDocuments/Jbig2.pdf"); + + Document doc = new Document(testFilePath); + + PdfImageRewriterOptions opts = new PdfImageRewriterOptions(); + + opts.bitonal_image_recompress_method = mupdf.mupdf.FZ_RECOMPRESS_FAX; + opts.recompress_when = mupdf.mupdf.FZ_RECOMPRESS_WHEN_ALWAYS; + + doc.RewriteImage(options: opts); + + doc.Save(@"e:\TestRecompressJBIG2.pdf"); + doc.Close(); + } + static void TestMarkdownReader() { Console.WriteLine("\n=== TestMarkdownReader ======================="); diff --git a/Demo/TestDocuments/Jbig2.pdf b/Demo/TestDocuments/Jbig2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d8c9a1301ded293175c283996d64f4a3f0f698a9 GIT binary patch literal 131376 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 z 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 literal 0 HcmV?d00001 diff --git a/MuPDF.NET.Test/DisposePatternTest.cs b/MuPDF.NET.Test/DisposePatternTest.cs new file mode 100644 index 00000000..80fdc4b6 --- /dev/null +++ b/MuPDF.NET.Test/DisposePatternTest.cs @@ -0,0 +1,119 @@ +using System; +using System.IO; +using NUnit.Framework; +using MuPDF.NET; + +namespace MuPDF.NET.Test +{ + public class DisposePatternTest + { + private const string TocPath = "../../../resources/toc.pdf"; + + [Test] + public void Document_Dispose_MultipleTimes_DoesNotThrow() + { + var doc = new Document(TocPath); + + doc.Dispose(); + + Assert.DoesNotThrow(() => doc.Dispose()); + } + + [Test] + public void Page_Dispose_MultipleTimes_DoesNotThrow() + { + var doc = new Document(TocPath); + var page = doc[0]; + + page.Dispose(); + + Assert.DoesNotThrow(() => page.Dispose()); + + doc.Dispose(); + } + + [Test] + public void TextPage_Dispose_MultipleTimes_DoesNotThrow() + { + var doc = new Document(TocPath); + var page = doc[0]; + var textPage = page.GetTextPage(); + + textPage.Dispose(); + + Assert.DoesNotThrow(() => textPage.Dispose()); + + page.Dispose(); + doc.Dispose(); + } + + [Test] + public void Story_Dispose_MultipleTimes_DoesNotThrow() + { + var story = new Story("

Hello

"); + + story.Dispose(); + + Assert.DoesNotThrow(() => story.Dispose()); + } + + [Test] + public void DisplayList_Dispose_MultipleTimes_DoesNotThrow() + { + var rect = new Rect(0, 0, 100, 100); + var dl = new DisplayList(rect); + + dl.Dispose(); + + Assert.DoesNotThrow(() => dl.Dispose()); + } + + [Test] + public void DocumentWriter_Dispose_MultipleTimes_DoesNotThrow() + { + string path = Path.GetTempFileName(); + + try + { + var writer = new DocumentWriter(path); + + writer.Dispose(); + + Assert.DoesNotThrow(() => writer.Dispose()); + } + finally + { + if (File.Exists(path)) + File.Delete(path); + } + } + + [Test] + public void Font_Dispose_MultipleTimes_DoesNotThrow() + { + var font = new Font(); + + font.Dispose(); + + Assert.DoesNotThrow(() => font.Dispose()); + } + + [Test] + public void GraftMap_Dispose_MultipleTimes_DoesNotThrow() + { + var doc = new Document(TocPath); + var map = new GraftMap(doc); + + map.Dispose(); + + Assert.DoesNotThrow(() => map.Dispose()); + + doc.Dispose(); + } + + // Outline is constructed internally from native MuPDF outline structures and + // not exposed as a public constructor. Its disposal semantics are exercised + // indirectly via Document/Document.GetToc tests, so we skip a direct idempotency test. + } +} + diff --git a/MuPDF.NET.Test/resources/test_1645_expected.pdf b/MuPDF.NET.Test/resources/test_1645_expected.pdf index 55f59f4a04b2ea9c91724df8e61a3d22c0dc7169..f6805572ae723aec044378cc8f0297b082e0d289 100644 GIT binary patch delta 14 Vcmew%@ srcCount - 1) tp = srcCount - 1; - + int len0 = Utils.MUPDF_WARNINGS_STORE.Count; PdfDocument pdfout = new PdfDocument(); - int incr = 1; - if (fp > tp) - { - incr = -1; - int t = tp; - tp = fp; - fp = t; - } - - int rot = Utils.NormalizeRotation(rotate); - int i = fp; + PdfWriteOptions opts = new PdfWriteOptions(); + FzBuffer res = null; + FzOutput output = null; - while (true) + try { - if (!Utils.INRANGE(i, fp, tp)) - break; - - FzPage page = doc.fz_load_page(i); - FzRect mediabox = page.fz_bound_page(); - PdfObj resources = new PdfObj(); - FzBuffer contents = new FzBuffer(); - FzDevice dev = pdfout.pdf_page_write(mediabox, resources, contents); - page.fz_run_page(dev, new FzMatrix(), new FzCookie()); - dev.fz_close_device(); - dev.Dispose(); - dev = null; + int incr = 1; + if (fp > tp) + { + incr = -1; + int t = tp; + tp = fp; + fp = t; + } - PdfObj pageObj = pdfout.pdf_add_page(mediabox, rot, resources, contents); - pdfout.pdf_insert_page(-1, pageObj); - i += incr; - } + int rot = Utils.NormalizeRotation(rotate); + int i = fp; - PdfWriteOptions opts = new PdfWriteOptions(); - opts.do_garbage = 4; - opts.do_compress = 1; - opts.do_compress_images = 1; - opts.do_compress_fonts = 1; - opts.do_sanitize = 1; - opts.do_incremental = 0; - opts.do_ascii = 0; - opts.do_decompress = 0; - opts.do_linear = 0; - opts.do_clean = 1; - opts.do_pretty = 0; - - FzBuffer res = mupdf.mupdf.fz_new_buffer(8192); - FzOutput output = new FzOutput(res); - pdfout.pdf_write_document(output, opts); - output.fz_close_output(); - output.Dispose(); + while (true) + { + if (!Utils.INRANGE(i, fp, tp)) + break; + + FzPage page = null; + PdfObj resources = null; + FzBuffer contents = null; + FzDevice dev = null; + + try + { + page = doc.fz_load_page(i); + FzRect mediabox = page.fz_bound_page(); + resources = new PdfObj(); + contents = new FzBuffer(); + dev = pdfout.pdf_page_write(mediabox, resources, contents); + page.fz_run_page(dev, new FzMatrix(), new FzCookie()); + + PdfObj pageObj = pdfout.pdf_add_page(mediabox, rot, resources, contents); + pdfout.pdf_insert_page(-1, pageObj); + } + finally + { + if (dev != null) + { + dev.fz_close_device(); + dev.Dispose(); + dev = null; + } + + if (contents != null) + { + contents.Dispose(); + contents = null; + } + + if (resources != null) + { + resources.Dispose(); + resources = null; + } + + if (page != null) + { + page.Dispose(); + page = null; + } + } + + i += incr; + } + + opts.do_garbage = 4; + opts.do_compress = 1; + opts.do_compress_images = 1; + opts.do_compress_fonts = 1; + opts.do_sanitize = 1; + opts.do_incremental = 0; + opts.do_ascii = 0; + opts.do_decompress = 0; + opts.do_linear = 0; + opts.do_clean = 1; + opts.do_pretty = 0; + + res = mupdf.mupdf.fz_new_buffer(8192); + output = new FzOutput(res); + pdfout.pdf_write_document(output, opts); + output.fz_close_output(); - byte[] ret = Utils.BinFromBuffer(res); - int len1 = Utils.MUPDF_WARNINGS_STORE.Count; + byte[] ret = Utils.BinFromBuffer(res); + int len1 = Utils.MUPDF_WARNINGS_STORE.Count; - for (i = len0; i < len1; i++) + for (int j = len0; j < len1; j++) + { + Console.WriteLine($"{Utils.MUPDF_WARNINGS_STORE[j]}"); + } + + return ret; + } + finally { - Console.WriteLine($"{Utils.MUPDF_WARNINGS_STORE[i]}"); + if (output != null) + { + output.Dispose(); + output = null; + } + + if (res != null) + { + res.Dispose(); + res = null; + } + + if (opts != null) + { + opts.Dispose(); + } + + if (pdfout != null) + { + pdfout.Dispose(); + } } - - return ret; } public FzDocument ToFzDocument() @@ -5952,8 +6014,9 @@ public void Bake(bool annots = true, bool widgets = true) public void Dispose() { + // Make Dispose idempotent: safe to call multiple times. if (IsClosed) - throw new Exception("document closed"); + return; if (Outline != null) { @@ -5969,19 +6032,12 @@ public void Dispose() public void Close() { + // Preserve existing Close() behavior (throws if already closed), + // but delegate the actual cleanup to Dispose(). if (IsClosed) throw new Exception("document closed"); - if (Outline != null) - { - Outline.Dispose(); - Outline = null; - } - ResetPageRefs(); - IsClosed = true; - GraftMaps = new Dictionary(); - _nativeDocument.Dispose(); - _nativeDocument = null; + Dispose(); } /// diff --git a/MuPDF.NET/DocumentWriter.cs b/MuPDF.NET/DocumentWriter.cs index aecb7df1..44ff69a5 100644 --- a/MuPDF.NET/DocumentWriter.cs +++ b/MuPDF.NET/DocumentWriter.cs @@ -1,9 +1,10 @@ -using mupdf; +using mupdf; +using System; using System.IO; namespace MuPDF.NET { - public class DocumentWriter + public class DocumentWriter : IDisposable { static DocumentWriter() { diff --git a/MuPDF.NET/Font.cs b/MuPDF.NET/Font.cs index 8e1717c3..87dc0764 100644 --- a/MuPDF.NET/Font.cs +++ b/MuPDF.NET/Font.cs @@ -1,10 +1,10 @@ -using mupdf; +using mupdf; using System; using System.Collections.Generic; namespace MuPDF.NET { - public class Font + public class Font : IDisposable { static Font() { diff --git a/MuPDF.NET/GraftMap.cs b/MuPDF.NET/GraftMap.cs index d4fa43c1..fe1fcb2a 100644 --- a/MuPDF.NET/GraftMap.cs +++ b/MuPDF.NET/GraftMap.cs @@ -1,8 +1,9 @@ -using mupdf; +using mupdf; +using System; namespace MuPDF.NET { - public class GraftMap + public class GraftMap : IDisposable { static GraftMap() { diff --git a/MuPDF.NET/MuPDF.NET.csproj b/MuPDF.NET/MuPDF.NET.csproj index 13b78fcc..64e8d067 100644 --- a/MuPDF.NET/MuPDF.NET.csproj +++ b/MuPDF.NET/MuPDF.NET.csproj @@ -54,7 +54,7 @@ - + diff --git a/MuPDF.NET/MuPDF.NET.nuspec b/MuPDF.NET/MuPDF.NET.nuspec index 086cfc5c..83c6a4ab 100644 --- a/MuPDF.NET/MuPDF.NET.nuspec +++ b/MuPDF.NET/MuPDF.NET.nuspec @@ -2,7 +2,7 @@ MuPDF.NET - 3.2.13-rc.12 + 3.2.13-rc.14 Artifex Software Inc. true LICENSE.md @@ -14,14 +14,14 @@ - + - + diff --git a/MuPDF.NET/Page.cs b/MuPDF.NET/Page.cs index 302f6241..b3e54841 100644 --- a/MuPDF.NET/Page.cs +++ b/MuPDF.NET/Page.cs @@ -14,7 +14,7 @@ namespace MuPDF.NET { - public class Page + public class Page : IDisposable { static Page() { diff --git a/MuPDF.NET/Pixmap.cs b/MuPDF.NET/Pixmap.cs index 0d533460..d2a2da1b 100644 --- a/MuPDF.NET/Pixmap.cs +++ b/MuPDF.NET/Pixmap.cs @@ -1,4 +1,4 @@ -using mupdf; +using mupdf; using SkiaSharp; using System; using System.Collections.Generic; @@ -900,12 +900,19 @@ public bool InvertIrect(IRect bbox = null) FzPixmap pm = _nativePixmap; if (_nativePixmap.fz_pixmap_colorspace() == null) { - Console.WriteLine("ignored for stencil pixmap"); return false; } - FzIrect r = bbox.ToFzIrect(); - if (r.fz_is_infinite_irect() != 0) + FzIrect r; + if (bbox is null) + { r = pm.fz_pixmap_bbox(); + } + else + { + r = bbox.ToFzIrect(); + if (r.fz_is_infinite_irect() != 0) + r = pm.fz_pixmap_bbox(); + } return Convert.ToBoolean(InvertPixmapRect(pm, r)); } diff --git a/MuPDF.NET/Story.cs b/MuPDF.NET/Story.cs index 5c7e89a5..a27476e7 100644 --- a/MuPDF.NET/Story.cs +++ b/MuPDF.NET/Story.cs @@ -1,4 +1,4 @@ -using mupdf; +using mupdf; using System; using System.Collections.Generic; using System.IO; @@ -6,7 +6,7 @@ namespace MuPDF.NET { - public class Story + public class Story : IDisposable { static Story() { diff --git a/MuPDF.NET/TextPage.cs b/MuPDF.NET/TextPage.cs index d0008d29..2dc5e66f 100644 --- a/MuPDF.NET/TextPage.cs +++ b/MuPDF.NET/TextPage.cs @@ -6,7 +6,7 @@ namespace MuPDF.NET { - public class TextPage + public class TextPage : IDisposable { static TextPage() { diff --git a/MuPDF.NET/build/net4/MuPDF.NET.targets b/MuPDF.NET/build/net4/MuPDF.NET.targets index d6606706..1d0d15e9 100644 --- a/MuPDF.NET/build/net4/MuPDF.NET.targets +++ b/MuPDF.NET/build/net4/MuPDF.NET.targets @@ -20,9 +20,9 @@ ( '$(IsX64)' == 'true' or ('$(IsAnyCPU)' == 'true' and '$(IsPrefer32Bit)' != 'true'))"> - - @@ -31,9 +31,9 @@ ( '$(IsX86)' == 'true' or ('$(IsAnyCPU)' == 'true' and '$(IsPrefer32Bit)' == 'true'))"> - - diff --git a/MuPDF.NET/mupdf_linux.cs b/MuPDF.NET/mupdf_linux.cs index e31615e3..bdf02450 100644 --- a/MuPDF.NET/mupdf_linux.cs +++ b/MuPDF.NET/mupdf_linux.cs @@ -26394,6 +26394,18 @@ public string bitonal_image_recompress_quality { } } + public int recompress_when { + set { + mupdfPINVOKE.pdf_image_rewriter_options_recompress_when_set(swigCPtr, value); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + } + get { + int ret = mupdfPINVOKE.pdf_image_rewriter_options_recompress_when_get(swigCPtr); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + public pdf_image_rewriter_options() : this(mupdfPINVOKE.new_pdf_image_rewriter_options(), true) { if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); } @@ -32513,6 +32525,113 @@ public static int s_num_instances { } namespace mupdf { +public class FzFlotilla : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal FzFlotilla(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(FzFlotilla obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + internal static global::System.Runtime.InteropServices.HandleRef swigRelease(FzFlotilla obj) { + if (obj != null) { + if (!obj.swigCMemOwn) + throw new global::System.ApplicationException("Cannot release ownership as memory is not owned"); + global::System.Runtime.InteropServices.HandleRef ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.Dispose(); + return ptr; + } else { + return new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + } + + ~FzFlotilla() { + Dispose(false); + } + + public void Dispose() { + Dispose(true); + global::System.GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + mupdfPINVOKE.delete_FzFlotilla(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + } + } + + public FzFlotilla(FzStextPage page) : this(mupdfPINVOKE.new_FzFlotilla__SWIG_0(FzStextPage.getCPtr(page)), true) { + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + } + + public FzFlotilla() : this(mupdfPINVOKE.new_FzFlotilla__SWIG_1(), true) { + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + } + + public FzRect fz_flotilla_raft_area(int i) { + FzRect ret = new FzRect(mupdfPINVOKE.FzFlotilla_fz_flotilla_raft_area(swigCPtr, i), true); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public int fz_flotilla_size() { + int ret = mupdfPINVOKE.FzFlotilla_fz_flotilla_size(swigCPtr); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public FzFlotilla(SWIGTYPE_p_fz_flotilla internal_) : this(mupdfPINVOKE.new_FzFlotilla__SWIG_2(SWIGTYPE_p_fz_flotilla.getCPtr(internal_)), true) { + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + } + + public long m_internal_value() { + long ret = mupdfPINVOKE.FzFlotilla_m_internal_value(swigCPtr); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public SWIGTYPE_p_fz_flotilla m_internal { + set { + mupdfPINVOKE.FzFlotilla_m_internal_set(swigCPtr, SWIGTYPE_p_fz_flotilla.getCPtr(value)); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + } + get { + global::System.IntPtr cPtr = mupdfPINVOKE.FzFlotilla_m_internal_get(swigCPtr); + SWIGTYPE_p_fz_flotilla ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_fz_flotilla(cPtr, false); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public static int s_num_instances { + set { + mupdfPINVOKE.FzFlotilla_s_num_instances_set(value); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + } + get { + int ret = mupdfPINVOKE.FzFlotilla_s_num_instances_get(); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + +} + +} +namespace mupdf { + public class FzFont : global::System.IDisposable { private global::System.Runtime.InteropServices.HandleRef swigCPtr; protected bool swigCMemOwn; @@ -53192,6 +53311,18 @@ public string bitonal_image_recompress_quality { } } + public int recompress_when { + set { + mupdfPINVOKE.PdfImageRewriterOptions_recompress_when_set(swigCPtr, value); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + } + get { + int ret = mupdfPINVOKE.PdfImageRewriterOptions_recompress_when_get(swigCPtr); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + public static int s_num_instances { set { mupdfPINVOKE.PdfImageRewriterOptions_s_num_instances_set(value); @@ -76756,6 +76887,12 @@ static mupdfPINVOKE() { [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FZ_STEXT_ACCURATE_SIDE_BEARINGS_get")] public static extern int FZ_STEXT_ACCURATE_SIDE_BEARINGS_get(); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FZ_STEXT_LAZY_VECTORS_get")] + public static extern int FZ_STEXT_LAZY_VECTORS_get(); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FZ_STEXT_FUZZY_VECTORS_get")] + public static extern int FZ_STEXT_FUZZY_VECTORS_get(); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FZ_STEXT_MEDIABOX_CLIP_get")] public static extern int FZ_STEXT_MEDIABOX_CLIP_get(); @@ -83947,6 +84084,12 @@ static mupdfPINVOKE() { [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FZ_RECOMPRESS_FAX_get")] public static extern int FZ_RECOMPRESS_FAX_get(); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FZ_RECOMPRESS_WHEN_SMALLER_get")] + public static extern int FZ_RECOMPRESS_WHEN_SMALLER_get(); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FZ_RECOMPRESS_WHEN_ALWAYS_get")] + public static extern int FZ_RECOMPRESS_WHEN_ALWAYS_get(); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_pdf_image_rewriter_options_color_lossless_image_subsample_method_set")] public static extern void pdf_image_rewriter_options_color_lossless_image_subsample_method_set(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); @@ -84097,6 +84240,12 @@ static mupdfPINVOKE() { [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_pdf_image_rewriter_options_bitonal_image_recompress_quality_get")] public static extern string pdf_image_rewriter_options_bitonal_image_recompress_quality_get(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_pdf_image_rewriter_options_recompress_when_set")] + public static extern void pdf_image_rewriter_options_recompress_when_set(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_pdf_image_rewriter_options_recompress_when_get")] + public static extern int pdf_image_rewriter_options_recompress_when_get(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_new_pdf_image_rewriter_options")] public static extern global::System.IntPtr new_pdf_image_rewriter_options(); @@ -84946,6 +85095,9 @@ static mupdfPINVOKE() { [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_drop_drawn_tiles_for_document")] public static extern void ll_fz_drop_drawn_tiles_for_document(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_drop_flotilla")] + public static extern void ll_fz_drop_flotilla(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_drop_font")] public static extern void ll_fz_drop_font(global::System.Runtime.InteropServices.HandleRef jarg1); @@ -85192,6 +85344,12 @@ static mupdfPINVOKE() { [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_find_table_within_bounds")] public static extern global::System.IntPtr ll_fz_find_table_within_bounds(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_flotilla_raft_area")] + public static extern global::System.IntPtr ll_fz_flotilla_raft_area(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_flotilla_size")] + public static extern int ll_fz_flotilla_size(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_flush_output")] public static extern void ll_fz_flush_output(global::System.Runtime.InteropServices.HandleRef jarg1); @@ -86320,6 +86478,9 @@ static mupdfPINVOKE() { [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_new_draw_device_with_proof")] public static extern global::System.IntPtr ll_fz_new_draw_device_with_proof(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_new_flotilla_from_stext_page_vectors")] + public static extern global::System.IntPtr ll_fz_new_flotilla_from_stext_page_vectors(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_new_font_from_buffer")] public static extern global::System.IntPtr ll_fz_new_font_from_buffer(string jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3, int jarg4); @@ -93307,6 +93468,39 @@ static mupdfPINVOKE() { [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FzErrorStackSlot_s_num_instances_get")] public static extern int FzErrorStackSlot_s_num_instances_get(); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_new_FzFlotilla__SWIG_0")] + public static extern global::System.IntPtr new_FzFlotilla__SWIG_0(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_new_FzFlotilla__SWIG_1")] + public static extern global::System.IntPtr new_FzFlotilla__SWIG_1(); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FzFlotilla_fz_flotilla_raft_area")] + public static extern global::System.IntPtr FzFlotilla_fz_flotilla_raft_area(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FzFlotilla_fz_flotilla_size")] + public static extern int FzFlotilla_fz_flotilla_size(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_new_FzFlotilla__SWIG_2")] + public static extern global::System.IntPtr new_FzFlotilla__SWIG_2(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_delete_FzFlotilla")] + public static extern void delete_FzFlotilla(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FzFlotilla_m_internal_value")] + public static extern long FzFlotilla_m_internal_value(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FzFlotilla_m_internal_set")] + public static extern void FzFlotilla_m_internal_set(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FzFlotilla_m_internal_get")] + public static extern global::System.IntPtr FzFlotilla_m_internal_get(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FzFlotilla_s_num_instances_set")] + public static extern void FzFlotilla_s_num_instances_set(int jarg1); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FzFlotilla_s_num_instances_get")] + public static extern int FzFlotilla_s_num_instances_get(); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_new_FzFont__SWIG_0")] public static extern global::System.IntPtr new_FzFont__SWIG_0(string jarg1); @@ -101050,6 +101244,12 @@ static mupdfPINVOKE() { [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_PdfImageRewriterOptions_bitonal_image_recompress_quality_get")] public static extern string PdfImageRewriterOptions_bitonal_image_recompress_quality_get(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_PdfImageRewriterOptions_recompress_when_set")] + public static extern void PdfImageRewriterOptions_recompress_when_set(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_PdfImageRewriterOptions_recompress_when_get")] + public static extern int PdfImageRewriterOptions_recompress_when_get(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_PdfImageRewriterOptions_s_num_instances_set")] public static extern void PdfImageRewriterOptions_s_num_instances_set(int jarg1); @@ -105274,6 +105474,12 @@ static mupdfPINVOKE() { [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_fz_find_table_within_bounds")] public static extern global::System.IntPtr fz_find_table_within_bounds(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_fz_flotilla_raft_area")] + public static extern global::System.IntPtr fz_flotilla_raft_area(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_fz_flotilla_size")] + public static extern int fz_flotilla_size(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_fz_flush_output")] public static extern void fz_flush_output(global::System.Runtime.InteropServices.HandleRef jarg1); @@ -115795,6 +116001,11 @@ public static void ll_fz_drop_drawn_tiles_for_document(fz_document doc) { if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); } + public static void ll_fz_drop_flotilla(SWIGTYPE_p_fz_flotilla f) { + mupdfPINVOKE.ll_fz_drop_flotilla(SWIGTYPE_p_fz_flotilla.getCPtr(f)); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + } + public static void ll_fz_drop_font(fz_font font) { mupdfPINVOKE.ll_fz_drop_font(fz_font.getCPtr(font)); if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); @@ -116231,6 +116442,18 @@ public static fz_stext_block ll_fz_find_table_within_bounds(fz_stext_page page, return ret; } + public static fz_rect ll_fz_flotilla_raft_area(SWIGTYPE_p_fz_flotilla flot, int i) { + fz_rect ret = new fz_rect(mupdfPINVOKE.ll_fz_flotilla_raft_area(SWIGTYPE_p_fz_flotilla.getCPtr(flot), i), true); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static int ll_fz_flotilla_size(SWIGTYPE_p_fz_flotilla flot) { + int ret = mupdfPINVOKE.ll_fz_flotilla_size(SWIGTYPE_p_fz_flotilla.getCPtr(flot)); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + public static void ll_fz_flush_output(fz_output out_) { mupdfPINVOKE.ll_fz_flush_output(fz_output.getCPtr(out_)); if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); @@ -118596,6 +118819,13 @@ public static fz_device ll_fz_new_draw_device_with_proof(fz_matrix transform, fz return ret; } + public static SWIGTYPE_p_fz_flotilla ll_fz_new_flotilla_from_stext_page_vectors(fz_stext_page page) { + global::System.IntPtr cPtr = mupdfPINVOKE.ll_fz_new_flotilla_from_stext_page_vectors(fz_stext_page.getCPtr(page)); + SWIGTYPE_p_fz_flotilla ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_fz_flotilla(cPtr, false); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + public static fz_font ll_fz_new_font_from_buffer(string name, fz_buffer buffer, int index, int use_glyph_bbox) { global::System.IntPtr cPtr = mupdfPINVOKE.ll_fz_new_font_from_buffer(name, fz_buffer.getCPtr(buffer), index, use_glyph_bbox); fz_font ret = (cPtr == global::System.IntPtr.Zero) ? null : new fz_font(cPtr, false); @@ -129491,6 +129721,18 @@ public static FzStextBlock fz_find_table_within_bounds(FzStextPage page, FzRect return ret; } + public static FzRect fz_flotilla_raft_area(FzFlotilla flot, int i) { + FzRect ret = new FzRect(mupdfPINVOKE.fz_flotilla_raft_area(FzFlotilla.getCPtr(flot), i), true); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static int fz_flotilla_size(FzFlotilla flot) { + int ret = mupdfPINVOKE.fz_flotilla_size(FzFlotilla.getCPtr(flot)); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + public static void fz_flush_output(FzOutput out_) { mupdfPINVOKE.fz_flush_output(FzOutput.getCPtr(out_)); if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); @@ -140044,6 +140286,8 @@ public static pdf_zugferd_profile ll_pdf_zugferd_profile_outparams_fn(pdf_docume public static readonly int FZ_STEXT_CLIP_RECT = mupdfPINVOKE.FZ_STEXT_CLIP_RECT_get(); public static readonly int FZ_STEXT_ACCURATE_ASCENDERS = mupdfPINVOKE.FZ_STEXT_ACCURATE_ASCENDERS_get(); public static readonly int FZ_STEXT_ACCURATE_SIDE_BEARINGS = mupdfPINVOKE.FZ_STEXT_ACCURATE_SIDE_BEARINGS_get(); + public static readonly int FZ_STEXT_LAZY_VECTORS = mupdfPINVOKE.FZ_STEXT_LAZY_VECTORS_get(); + public static readonly int FZ_STEXT_FUZZY_VECTORS = mupdfPINVOKE.FZ_STEXT_FUZZY_VECTORS_get(); public static readonly int FZ_STEXT_MEDIABOX_CLIP = mupdfPINVOKE.FZ_STEXT_MEDIABOX_CLIP_get(); public static readonly int FZ_STEXT_BLOCK_TEXT = mupdfPINVOKE.FZ_STEXT_BLOCK_TEXT_get(); @@ -140884,6 +141128,9 @@ public static pdf_zugferd_profile ll_pdf_zugferd_profile_outparams_fn(pdf_docume public static readonly int FZ_RECOMPRESS_J2K = mupdfPINVOKE.FZ_RECOMPRESS_J2K_get(); public static readonly int FZ_RECOMPRESS_FAX = mupdfPINVOKE.FZ_RECOMPRESS_FAX_get(); + public static readonly int FZ_RECOMPRESS_WHEN_SMALLER = mupdfPINVOKE.FZ_RECOMPRESS_WHEN_SMALLER_get(); + public static readonly int FZ_RECOMPRESS_WHEN_ALWAYS = mupdfPINVOKE.FZ_RECOMPRESS_WHEN_ALWAYS_get(); + public static readonly int UCDN_EAST_ASIAN_F = mupdfPINVOKE.UCDN_EAST_ASIAN_F_get(); public static readonly int UCDN_EAST_ASIAN_H = mupdfPINVOKE.UCDN_EAST_ASIAN_H_get(); public static readonly int UCDN_EAST_ASIAN_W = mupdfPINVOKE.UCDN_EAST_ASIAN_W_get(); @@ -145064,6 +145311,29 @@ protected SWIGTYPE_p_f_p_fz_context_p_pdf_processor_float__void() { } namespace mupdf { +public class SWIGTYPE_p_fz_flotilla { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal SWIGTYPE_p_fz_flotilla(global::System.IntPtr cPtr, bool futureUse) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_fz_flotilla() { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(SWIGTYPE_p_fz_flotilla obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + internal static global::System.Runtime.InteropServices.HandleRef swigRelease(SWIGTYPE_p_fz_flotilla obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } +} + +} +namespace mupdf { + public class SWIGTYPE_p_f_p_fz_context_p_fz_document_p_fz_output__void { private global::System.Runtime.InteropServices.HandleRef swigCPtr; diff --git a/MuPDF.NET/mupdf_windows.cs b/MuPDF.NET/mupdf_windows.cs index 6af727d8..0be1e619 100644 --- a/MuPDF.NET/mupdf_windows.cs +++ b/MuPDF.NET/mupdf_windows.cs @@ -26394,6 +26394,18 @@ public string bitonal_image_recompress_quality { } } + public int recompress_when { + set { + mupdfPINVOKE.pdf_image_rewriter_options_recompress_when_set(swigCPtr, value); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + } + get { + int ret = mupdfPINVOKE.pdf_image_rewriter_options_recompress_when_get(swigCPtr); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + public pdf_image_rewriter_options() : this(mupdfPINVOKE.new_pdf_image_rewriter_options(), true) { if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); } @@ -32513,6 +32525,113 @@ public static int s_num_instances { } namespace mupdf { +public class FzFlotilla : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal FzFlotilla(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(FzFlotilla obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + internal static global::System.Runtime.InteropServices.HandleRef swigRelease(FzFlotilla obj) { + if (obj != null) { + if (!obj.swigCMemOwn) + throw new global::System.ApplicationException("Cannot release ownership as memory is not owned"); + global::System.Runtime.InteropServices.HandleRef ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.Dispose(); + return ptr; + } else { + return new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + } + + ~FzFlotilla() { + Dispose(false); + } + + public void Dispose() { + Dispose(true); + global::System.GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + mupdfPINVOKE.delete_FzFlotilla(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + } + } + + public FzFlotilla(FzStextPage page) : this(mupdfPINVOKE.new_FzFlotilla__SWIG_0(FzStextPage.getCPtr(page)), true) { + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + } + + public FzFlotilla() : this(mupdfPINVOKE.new_FzFlotilla__SWIG_1(), true) { + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + } + + public FzRect fz_flotilla_raft_area(int i) { + FzRect ret = new FzRect(mupdfPINVOKE.FzFlotilla_fz_flotilla_raft_area(swigCPtr, i), true); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public int fz_flotilla_size() { + int ret = mupdfPINVOKE.FzFlotilla_fz_flotilla_size(swigCPtr); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public FzFlotilla(SWIGTYPE_p_fz_flotilla internal_) : this(mupdfPINVOKE.new_FzFlotilla__SWIG_2(SWIGTYPE_p_fz_flotilla.getCPtr(internal_)), true) { + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + } + + public long m_internal_value() { + long ret = mupdfPINVOKE.FzFlotilla_m_internal_value(swigCPtr); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public SWIGTYPE_p_fz_flotilla m_internal { + set { + mupdfPINVOKE.FzFlotilla_m_internal_set(swigCPtr, SWIGTYPE_p_fz_flotilla.getCPtr(value)); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + } + get { + global::System.IntPtr cPtr = mupdfPINVOKE.FzFlotilla_m_internal_get(swigCPtr); + SWIGTYPE_p_fz_flotilla ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_fz_flotilla(cPtr, false); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + + public static int s_num_instances { + set { + mupdfPINVOKE.FzFlotilla_s_num_instances_set(value); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + } + get { + int ret = mupdfPINVOKE.FzFlotilla_s_num_instances_get(); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + +} + +} +namespace mupdf { + public class FzFont : global::System.IDisposable { private global::System.Runtime.InteropServices.HandleRef swigCPtr; protected bool swigCMemOwn; @@ -53192,6 +53311,18 @@ public string bitonal_image_recompress_quality { } } + public int recompress_when { + set { + mupdfPINVOKE.PdfImageRewriterOptions_recompress_when_set(swigCPtr, value); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + } + get { + int ret = mupdfPINVOKE.PdfImageRewriterOptions_recompress_when_get(swigCPtr); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + } + public static int s_num_instances { set { mupdfPINVOKE.PdfImageRewriterOptions_s_num_instances_set(value); @@ -76766,6 +76897,12 @@ static mupdfPINVOKE() { [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FZ_STEXT_ACCURATE_SIDE_BEARINGS_get")] public static extern int FZ_STEXT_ACCURATE_SIDE_BEARINGS_get(); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FZ_STEXT_LAZY_VECTORS_get")] + public static extern int FZ_STEXT_LAZY_VECTORS_get(); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FZ_STEXT_FUZZY_VECTORS_get")] + public static extern int FZ_STEXT_FUZZY_VECTORS_get(); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FZ_STEXT_MEDIABOX_CLIP_get")] public static extern int FZ_STEXT_MEDIABOX_CLIP_get(); @@ -83998,6 +84135,12 @@ static mupdfPINVOKE() { [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FZ_RECOMPRESS_FAX_get")] public static extern int FZ_RECOMPRESS_FAX_get(); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FZ_RECOMPRESS_WHEN_SMALLER_get")] + public static extern int FZ_RECOMPRESS_WHEN_SMALLER_get(); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FZ_RECOMPRESS_WHEN_ALWAYS_get")] + public static extern int FZ_RECOMPRESS_WHEN_ALWAYS_get(); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_pdf_image_rewriter_options_color_lossless_image_subsample_method_set")] public static extern void pdf_image_rewriter_options_color_lossless_image_subsample_method_set(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); @@ -84148,6 +84291,12 @@ static mupdfPINVOKE() { [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_pdf_image_rewriter_options_bitonal_image_recompress_quality_get")] public static extern string pdf_image_rewriter_options_bitonal_image_recompress_quality_get(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_pdf_image_rewriter_options_recompress_when_set")] + public static extern void pdf_image_rewriter_options_recompress_when_set(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_pdf_image_rewriter_options_recompress_when_get")] + public static extern int pdf_image_rewriter_options_recompress_when_get(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_new_pdf_image_rewriter_options")] public static extern global::System.IntPtr new_pdf_image_rewriter_options(); @@ -85009,6 +85158,9 @@ static mupdfPINVOKE() { [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_drop_drawn_tiles_for_document")] public static extern void ll_fz_drop_drawn_tiles_for_document(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_drop_flotilla")] + public static extern void ll_fz_drop_flotilla(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_drop_font")] public static extern void ll_fz_drop_font(global::System.Runtime.InteropServices.HandleRef jarg1); @@ -85255,6 +85407,12 @@ static mupdfPINVOKE() { [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_find_table_within_bounds")] public static extern global::System.IntPtr ll_fz_find_table_within_bounds(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_flotilla_raft_area")] + public static extern global::System.IntPtr ll_fz_flotilla_raft_area(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_flotilla_size")] + public static extern int ll_fz_flotilla_size(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_flush_output")] public static extern void ll_fz_flush_output(global::System.Runtime.InteropServices.HandleRef jarg1); @@ -86393,6 +86551,9 @@ static mupdfPINVOKE() { [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_new_draw_device_with_proof")] public static extern global::System.IntPtr ll_fz_new_draw_device_with_proof(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_new_flotilla_from_stext_page_vectors")] + public static extern global::System.IntPtr ll_fz_new_flotilla_from_stext_page_vectors(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_ll_fz_new_font_from_buffer")] public static extern global::System.IntPtr ll_fz_new_font_from_buffer([global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPUTF8Str)]string jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3, int jarg4); @@ -93503,6 +93664,39 @@ static mupdfPINVOKE() { [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FzErrorStackSlot_s_num_instances_get")] public static extern int FzErrorStackSlot_s_num_instances_get(); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_new_FzFlotilla__SWIG_0")] + public static extern global::System.IntPtr new_FzFlotilla__SWIG_0(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_new_FzFlotilla__SWIG_1")] + public static extern global::System.IntPtr new_FzFlotilla__SWIG_1(); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FzFlotilla_fz_flotilla_raft_area")] + public static extern global::System.IntPtr FzFlotilla_fz_flotilla_raft_area(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FzFlotilla_fz_flotilla_size")] + public static extern int FzFlotilla_fz_flotilla_size(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_new_FzFlotilla__SWIG_2")] + public static extern global::System.IntPtr new_FzFlotilla__SWIG_2(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_delete_FzFlotilla")] + public static extern void delete_FzFlotilla(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FzFlotilla_m_internal_value")] + public static extern long FzFlotilla_m_internal_value(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FzFlotilla_m_internal_set")] + public static extern void FzFlotilla_m_internal_set(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FzFlotilla_m_internal_get")] + public static extern global::System.IntPtr FzFlotilla_m_internal_get(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FzFlotilla_s_num_instances_set")] + public static extern void FzFlotilla_s_num_instances_set(int jarg1); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_FzFlotilla_s_num_instances_get")] + public static extern int FzFlotilla_s_num_instances_get(); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_new_FzFont__SWIG_0")] public static extern global::System.IntPtr new_FzFont__SWIG_0([global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPUTF8Str)]string jarg1); @@ -101297,6 +101491,12 @@ static mupdfPINVOKE() { [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_PdfImageRewriterOptions_bitonal_image_recompress_quality_get")] public static extern string PdfImageRewriterOptions_bitonal_image_recompress_quality_get(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_PdfImageRewriterOptions_recompress_when_set")] + public static extern void PdfImageRewriterOptions_recompress_when_set(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_PdfImageRewriterOptions_recompress_when_get")] + public static extern int PdfImageRewriterOptions_recompress_when_get(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_PdfImageRewriterOptions_s_num_instances_set")] public static extern void PdfImageRewriterOptions_s_num_instances_set(int jarg1); @@ -105562,6 +105762,12 @@ static mupdfPINVOKE() { [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_fz_find_table_within_bounds")] public static extern global::System.IntPtr fz_find_table_within_bounds(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_fz_flotilla_raft_area")] + public static extern global::System.IntPtr fz_flotilla_raft_area(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_fz_flotilla_size")] + public static extern int fz_flotilla_size(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mupdfcsharp.dll", EntryPoint="CSharp_mupdf_fz_flush_output")] public static extern void fz_flush_output(global::System.Runtime.InteropServices.HandleRef jarg1); @@ -116170,6 +116376,11 @@ public static void ll_fz_drop_drawn_tiles_for_document(fz_document doc) { if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); } + public static void ll_fz_drop_flotilla(SWIGTYPE_p_fz_flotilla f) { + mupdfPINVOKE.ll_fz_drop_flotilla(SWIGTYPE_p_fz_flotilla.getCPtr(f)); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + } + public static void ll_fz_drop_font(fz_font font) { mupdfPINVOKE.ll_fz_drop_font(fz_font.getCPtr(font)); if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); @@ -116606,6 +116817,18 @@ public static fz_stext_block ll_fz_find_table_within_bounds(fz_stext_page page, return ret; } + public static fz_rect ll_fz_flotilla_raft_area(SWIGTYPE_p_fz_flotilla flot, int i) { + fz_rect ret = new fz_rect(mupdfPINVOKE.ll_fz_flotilla_raft_area(SWIGTYPE_p_fz_flotilla.getCPtr(flot), i), true); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static int ll_fz_flotilla_size(SWIGTYPE_p_fz_flotilla flot) { + int ret = mupdfPINVOKE.ll_fz_flotilla_size(SWIGTYPE_p_fz_flotilla.getCPtr(flot)); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + public static void ll_fz_flush_output(fz_output out_) { mupdfPINVOKE.ll_fz_flush_output(fz_output.getCPtr(out_)); if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); @@ -118971,6 +119194,13 @@ public static fz_device ll_fz_new_draw_device_with_proof(fz_matrix transform, fz return ret; } + public static SWIGTYPE_p_fz_flotilla ll_fz_new_flotilla_from_stext_page_vectors(fz_stext_page page) { + global::System.IntPtr cPtr = mupdfPINVOKE.ll_fz_new_flotilla_from_stext_page_vectors(fz_stext_page.getCPtr(page)); + SWIGTYPE_p_fz_flotilla ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_fz_flotilla(cPtr, false); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + public static fz_font ll_fz_new_font_from_buffer(string name, fz_buffer buffer, int index, int use_glyph_bbox) { global::System.IntPtr cPtr = mupdfPINVOKE.ll_fz_new_font_from_buffer(name, fz_buffer.getCPtr(buffer), index, use_glyph_bbox); fz_font ret = (cPtr == global::System.IntPtr.Zero) ? null : new fz_font(cPtr, false); @@ -129866,6 +130096,18 @@ public static FzStextBlock fz_find_table_within_bounds(FzStextPage page, FzRect return ret; } + public static FzRect fz_flotilla_raft_area(FzFlotilla flot, int i) { + FzRect ret = new FzRect(mupdfPINVOKE.fz_flotilla_raft_area(FzFlotilla.getCPtr(flot), i), true); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public static int fz_flotilla_size(FzFlotilla flot) { + int ret = mupdfPINVOKE.fz_flotilla_size(FzFlotilla.getCPtr(flot)); + if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + public static void fz_flush_output(FzOutput out_) { mupdfPINVOKE.fz_flush_output(FzOutput.getCPtr(out_)); if (mupdfPINVOKE.SWIGPendingException.Pending) throw mupdfPINVOKE.SWIGPendingException.Retrieve(); @@ -140419,6 +140661,8 @@ public static pdf_zugferd_profile ll_pdf_zugferd_profile_outparams_fn(pdf_docume public static readonly int FZ_STEXT_CLIP_RECT = mupdfPINVOKE.FZ_STEXT_CLIP_RECT_get(); public static readonly int FZ_STEXT_ACCURATE_ASCENDERS = mupdfPINVOKE.FZ_STEXT_ACCURATE_ASCENDERS_get(); public static readonly int FZ_STEXT_ACCURATE_SIDE_BEARINGS = mupdfPINVOKE.FZ_STEXT_ACCURATE_SIDE_BEARINGS_get(); + public static readonly int FZ_STEXT_LAZY_VECTORS = mupdfPINVOKE.FZ_STEXT_LAZY_VECTORS_get(); + public static readonly int FZ_STEXT_FUZZY_VECTORS = mupdfPINVOKE.FZ_STEXT_FUZZY_VECTORS_get(); public static readonly int FZ_STEXT_MEDIABOX_CLIP = mupdfPINVOKE.FZ_STEXT_MEDIABOX_CLIP_get(); public static readonly int FZ_STEXT_BLOCK_TEXT = mupdfPINVOKE.FZ_STEXT_BLOCK_TEXT_get(); @@ -141259,6 +141503,9 @@ public static pdf_zugferd_profile ll_pdf_zugferd_profile_outparams_fn(pdf_docume public static readonly int FZ_RECOMPRESS_J2K = mupdfPINVOKE.FZ_RECOMPRESS_J2K_get(); public static readonly int FZ_RECOMPRESS_FAX = mupdfPINVOKE.FZ_RECOMPRESS_FAX_get(); + public static readonly int FZ_RECOMPRESS_WHEN_SMALLER = mupdfPINVOKE.FZ_RECOMPRESS_WHEN_SMALLER_get(); + public static readonly int FZ_RECOMPRESS_WHEN_ALWAYS = mupdfPINVOKE.FZ_RECOMPRESS_WHEN_ALWAYS_get(); + public static readonly int UCDN_EAST_ASIAN_F = mupdfPINVOKE.UCDN_EAST_ASIAN_F_get(); public static readonly int UCDN_EAST_ASIAN_H = mupdfPINVOKE.UCDN_EAST_ASIAN_H_get(); public static readonly int UCDN_EAST_ASIAN_W = mupdfPINVOKE.UCDN_EAST_ASIAN_W_get(); @@ -145439,6 +145686,29 @@ protected SWIGTYPE_p_f_p_fz_context_p_pdf_processor_float__void() { } namespace mupdf { +public class SWIGTYPE_p_fz_flotilla { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal SWIGTYPE_p_fz_flotilla(global::System.IntPtr cPtr, bool futureUse) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_fz_flotilla() { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(SWIGTYPE_p_fz_flotilla obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + internal static global::System.Runtime.InteropServices.HandleRef swigRelease(SWIGTYPE_p_fz_flotilla obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } +} + +} +namespace mupdf { + public class SWIGTYPE_p_f_p_fz_context_p_fz_document_p_fz_output__void { private global::System.Runtime.InteropServices.HandleRef swigCPtr; diff --git a/MuPDF.NET/structures/Outline.cs b/MuPDF.NET/structures/Outline.cs index ffef933f..2a71ec56 100644 --- a/MuPDF.NET/structures/Outline.cs +++ b/MuPDF.NET/structures/Outline.cs @@ -1,9 +1,10 @@ -using mupdf; +using mupdf; +using System; using static System.Net.Mime.MediaTypeNames; namespace MuPDF.NET { - public class Outline + public class Outline : IDisposable { static Outline() {