From d457b385ca412b9f866a730afa0413bafa12f628 Mon Sep 17 00:00:00 2001
From: ziggy90127 <ziggy90127@aol.com>
Date: Mon, 10 Sep 2018 13:40:24 -0600
Subject: [PATCH] Added TIFF/CMYK support, improved DLL support, fixed some
bugs
---
if/c#/hpdf.cs | 541 ++++++++++++++++++++++++++++++--------------------
1 file changed, 329 insertions(+), 212 deletions(-)
diff --git a/if/c#/hpdf.cs b/if/c#/hpdf.cs
index ecb963a..0e17c4a 100644
--- a/if/c#/hpdf.cs
+++ b/if/c#/hpdf.cs
@@ -14,9 +14,70 @@
*
*/
+/*
+
+SysInternal's ProcessMonitor shows exactly where Windows looks for DLLImport unmanaged/native DLL's,
+and all it's dependents/imports. Here's 2 methods to have a DLL found:
+
+Method #1: SetDllDirectory()
+
+using System.Web;
+
+public myClass
+{
+ private static bool dllIsLoaded = false;
+
+ [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ static extern bool SetDllDirectory(string lpPathName);
+
+ public void myDllLoader()
+ {
+ if (!dllIsLoaded)
+ {
+ #if DEBUG
+ string dllDir = Path.Combine(HttpRuntime.AppDomainAppPath, @"Lib\Debug\");
+ #else
+ string dllDir = Path.Combine(HttpRuntime.AppDomainAppPath, @"Lib\Release\");
+ #endif
+ SetDllDirectory(dllDir);
+ // Call any function in your DLL to load it. Stays loaded for the duration of the app.
+ string ver = myDllGetVersion();
+ SetDllDirectory(""); // Reset path to original
+
+ dllIsLoaded = true;
+ }
+ }
+}
+
+Method #2: Pre-pend the PATH environment variable with my App's directory of DLL's:
+
+using System.Web;
+
+string dllDir = Path.Combine(HttpRuntime.AppDomainAppPath, @"myAppDLLDirectory\");
+string currentPath = Environment.GetEnvironmentVariable("path");
+Environment.SetEnvironmentVariable("path", $"{dllDir};{currentPath}");
+
+This modification of PATH affects the current process only.
+
+If your error message says it can't find your DLL, but your DLL is on the DLL search path,
+it could really mean one of the DLL's your DLL is importing can't be found.
+For example, my DLL depended on "vcruntime140d.dll" and "ucrtbased.dll", which I had on my
+development machine, but were not on the server I was deploying to. List dependencies using
+"dumpbin.exe /imports my.dll". Dumpbin is available from the Visual Studio "x64 Native Tools Command Prompt".
+
+libharu binaries are from the vcpkg package manager.
+"set VCPKG_DEFAULT_TRIPLET=x64-windows"
+"vcpkg install libharu"
+
+*/
+
using System;
using System.Runtime.InteropServices;
-
+using System.IO;
+using System.Windows.Media.Imaging;
+using System.Windows.Media;
+using System.Collections.Generic;
namespace HPdf {
@@ -314,6 +375,15 @@ public struct HPdfCMYKColor {
public delegate void HPDF_ErrorHandler(uint error_no, uint detail_no,
IntPtr user_data);
+public static class HPDF_DLL
+{
+#if DEBUG
+ public const string Name = "libhpdfd.dll";
+#else
+ public const string Name = "libhpdf.dll";
+#endif
+}
+
public class HPdfDoc: IDisposable {
public const int HPDF_TRUE = 1;
public const int HPDF_FALSE = 0;
@@ -335,208 +405,209 @@ public class HPdfDoc: IDisposable {
public const uint HPDF_ENABLE_COPY = 16;
public const uint HPDF_ENABLE_EDIT = 32;
+ [DllImport(HPDF_DLL.Name)]
+ private extern static IntPtr HPDF_GetVersion();
- [DllImport("libhpdf.dll")]
- private extern static string HPDF_GetVersion();
-
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_New(HPDF_ErrorHandler user_error_fn,
IntPtr user_data);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static void HPDF_Free(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_NewDoc(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_FreeDoc(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_FreeDocAll(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_HasDoc(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_SaveToFile(IntPtr pdf, string file_name);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_GetError(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_GetErrorDetail(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static void HPDF_ResetError(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_SetPagesConfiguration(IntPtr pdf,
uint page_per_pages);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_GetPageByIndex(IntPtr pdf,
uint index);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfPageLayout HPDF_GetPageLayout(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_SetPageLayout(IntPtr pdf,
HPdfPageLayout layout);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfPageMode HPDF_GetPageMode(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_SetPageMode(IntPtr pdf, HPdfPageMode mode);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_SetOpenAction(IntPtr pdf,
IntPtr open_action);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_GetViewerPreference(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_SetViewerPreference(IntPtr pdf, uint value);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_GetCurrentPage(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_AddPage(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_InsertPage(IntPtr pdf,
IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_GetFont(IntPtr pdf, string font_name,
string encoding_name);
- [DllImport("libhpdf.dll")]
- private extern static string HPDF_LoadType1FontFromFile(IntPtr pdf,
+ [DllImport(HPDF_DLL.Name)]
+ private extern static IntPtr HPDF_LoadType1FontFromFile(IntPtr pdf,
string afmfilename, string pfmfilename);
- [DllImport("libhpdf.dll")]
- private extern static string HPDF_LoadTTFontFromFile(IntPtr pdf,
+ [DllImport(HPDF_DLL.Name)]
+ private extern static IntPtr HPDF_LoadTTFontFromFile(IntPtr pdf,
string file_name, int embedding);
- [DllImport("libhpdf.dll")]
- private extern static string HPDF_LoadTTFontFromFile2(IntPtr pdf,
+ [DllImport(HPDF_DLL.Name)]
+ private extern static IntPtr HPDF_LoadTTFontFromFile2(IntPtr pdf,
string file_name, uint index, int embedding);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_AddPageLabel(IntPtr pdf, uint page_num,
HPdfPageNumStyle style, uint first_page, string prefix);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_UseJPFonts(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_UseKRFonts(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_UseCNSFonts(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_UseCNTFonts(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_CreateOutline(IntPtr pdf, IntPtr parent,
string title, IntPtr encoder);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_GetEncoder(IntPtr pdf,
string encoding_name);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_GetCurrentEncoder(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_SetCurrentEncoder(IntPtr pdf,
string encoding_name);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_UseJPEncodings(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_UseKREncodings(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_UseCNSEncodings(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_UseCNTEncodings(IntPtr pdf);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_LoadPngImageFromFile(IntPtr pdf,
string filename);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_LoadPngImageFromFile2(IntPtr pdf,
string filename);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_LoadJpegImageFromFile(IntPtr pdf,
string filename);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_LoadRawImageFromFile(IntPtr pdf,
string filename, uint width, uint height,
HPdfColorSpace color_space);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_LoadRawImageFromMem(IntPtr pdf,
byte[] data, int width, int height,
HPdfColorSpace color_space,
uint bits_per_component);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_SetInfoAttr(IntPtr pdf,
HPdfInfoType type, string value);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_SetInfoDateAttr(IntPtr pdf,
HPdfInfoType type, HPdfDate value);
- [DllImport("libhpdf.dll")]
- private extern static string HPDF_GetInfoAttr(IntPtr pdf,
+ [DllImport(HPDF_DLL.Name)]
+ private extern static IntPtr HPDF_GetInfoAttr(IntPtr pdf,
HPdfInfoType type);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_SetPassword(IntPtr pdf,
string owner_passwd, string user_passwd);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_SetPermission(IntPtr pdf,
uint permission);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_SetEncryptionMode(IntPtr pdf,
HPdfEncryptMode mode, uint key_len);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_SetCompressionMode(IntPtr pdf,
uint mode);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_CreateExtGState(IntPtr pdf);
// handle to an instance of a HPdfDoc object.
private IntPtr hpdf;
+ private HPDF_ErrorHandler error_handler; // Need to hold on to/pin delegate callback
+
public HPdfDoc() {
- HPDF_ErrorHandler error_handler =
- new HPDF_ErrorHandler(HPdfDoc.ErrorProc);
+ error_handler = new HPDF_ErrorHandler(HPdfDoc.ErrorProc);
hpdf = HPDF_New(error_handler, IntPtr.Zero);
if (hpdf == IntPtr.Zero) {
throw new Exception("cannot create HPdfDoc object.");
}
}
- void IDisposable.Dispose() {
+ public void Dispose()
+ {
if (hpdf != IntPtr.Zero) {
HPDF_Free(hpdf);
}
@@ -551,7 +622,7 @@ public class HPdfDoc: IDisposable {
}
public static string HPdfGetVersion() {
- return HPDF_GetVersion();
+ return System.Runtime.InteropServices.Marshal.PtrToStringAnsi(HPDF_GetVersion());
}
public static void ErrorProc(uint error_no, uint detail_no,
@@ -667,7 +738,7 @@ public class HPdfDoc: IDisposable {
string pfmfilename) {
string font_name;
- font_name = HPDF_LoadType1FontFromFile(hpdf, afmfilename, pfmfilename);
+ font_name = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(HPDF_LoadType1FontFromFile(hpdf, afmfilename, pfmfilename));
return font_name;
}
@@ -680,7 +751,7 @@ public class HPdfDoc: IDisposable {
else
emb = HPDF_FALSE;
- font_name = HPDF_LoadTTFontFromFile(hpdf, file_name, emb);
+ font_name = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(HPDF_LoadTTFontFromFile(hpdf, file_name, emb));
return font_name;
}
@@ -694,7 +765,7 @@ public class HPdfDoc: IDisposable {
else
emb = HPDF_FALSE;
- font_name = HPDF_LoadTTFontFromFile2(hpdf, file_name, index, emb);
+ font_name = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(HPDF_LoadTTFontFromFile2(hpdf, file_name, index, emb));
return font_name;
}
@@ -799,6 +870,47 @@ public class HPdfDoc: IDisposable {
return new HPdfImage(hobj);
}
+ public class RawParams
+ {
+ public HPdfColorSpace cs;
+ public uint bitsPerComponent;
+ }
+
+ public Dictionary<PixelFormat, RawParams> rawDict = new Dictionary<PixelFormat, RawParams>()
+ {
+ { PixelFormats.Bgr24, new RawParams(){cs=HPdfColorSpace.HPDF_CS_DEVICE_RGB, bitsPerComponent=8} },
+ { PixelFormats.Cmyk32, new RawParams(){cs=HPdfColorSpace.HPDF_CS_DEVICE_CMYK, bitsPerComponent=8} },
+ { PixelFormats.Gray8, new RawParams(){cs=HPdfColorSpace.HPDF_CS_DEVICE_GRAY, bitsPerComponent=8} },
+ { PixelFormats.BlackWhite, new RawParams(){cs=HPdfColorSpace.HPDF_CS_DEVICE_GRAY, bitsPerComponent=1} },
+ };
+
+ public HPdfImage LoadTiffImageFromFile(string filename) {
+ IntPtr hobj;
+
+ using (Stream imageStreamSource = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
+ {
+ TiffBitmapDecoder decoder = new TiffBitmapDecoder(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
+ BitmapSource bitmapSource = decoder.Frames[0];
+
+ RawParams rp;
+ if (!rawDict.TryGetValue(bitmapSource.Format, out rp))
+ throw new Exception($"LoadTiffImageFromFile(\"{filename}\") Color Space \"{bitmapSource.Format.ToString()}\" is not supported.");
+
+ int bytesPerRow = (((bitmapSource.Format.BitsPerPixel * bitmapSource.PixelWidth) + 7) / 8);
+ int stride = bytesPerRow;
+
+ int arrayLength = stride * bitmapSource.PixelHeight;
+
+ byte[] bitmapData = new byte[arrayLength];
+
+ bitmapSource.CopyPixels(bitmapData, stride, 0);
+
+ hobj = HPDF_LoadRawImageFromMem(hpdf, bitmapData, bitmapSource.PixelWidth, bitmapSource.PixelHeight, rp.cs, rp.bitsPerComponent);
+ }
+
+ return new HPdfImage(hobj);
+ }
+
public HPdfImage LoadRawImageFromFile(string filename,
uint width, uint height,
HPdfColorSpace color_space) {
@@ -826,6 +938,7 @@ public class HPdfDoc: IDisposable {
public void SetInfoAttr(HPdfInfoType type, string value) {
HPDF_SetInfoAttr(hpdf, type, value);
+
}
public void SetInfoDateAttr(HPdfInfoType type, HPdfDate value) {
@@ -833,7 +946,7 @@ public class HPdfDoc: IDisposable {
}
public string GetInfoAttr(HPdfInfoType type) {
- return HPDF_GetInfoAttr(hpdf, type);
+ return System.Runtime.InteropServices.Marshal.PtrToStringAnsi(HPDF_GetInfoAttr(hpdf, type));
}
public void SetPassword(string owner_passwd, string user_passwd) {
@@ -865,361 +978,361 @@ public class HPdfPage{
public const int HPDF_TRUE = 1;
public const int HPDF_FALSE = 0;
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetWidth(IntPtr page, float value);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetHeight(IntPtr page, float value);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetSize(IntPtr page,
HPdfPageSizes size, HPdfPageDirection direction);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetRotate(IntPtr page, ushort angle);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_Page_CreateDestination(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_Page_CreateTextAnnot(IntPtr page,
HPdfRect rect, string text, IntPtr encoder);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_Page_CreateLinkAnnot(IntPtr page,
HPdfRect rect, IntPtr dst);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_Page_CreateURILinkAnnot(IntPtr page,
HPdfRect rect, string url);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static float HPDF_Page_TextWidth(IntPtr page,
string text);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_MeasureText(IntPtr page,
string text, float width, int wordwrap, ref float real_width);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static float HPDF_Page_GetWidth(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static float HPDF_Page_GetHeight(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static ushort HPDF_Page_GetGMode(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfPoint HPDF_Page_GetCurrentPos(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfPoint HPDF_Page_GetCurrentTextPos(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static IntPtr HPDF_Page_GetCurrentFont(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static float HPDF_Page_GetCurrentFontSize(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfTransMatrix HPDF_Page_GetTransMatrix(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static float HPDF_Page_GetLineWidth(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfLineCap HPDF_Page_GetLineCap(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfLineJoin HPDF_Page_GetLineJoin(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static float HPDF_Page_GetMiterLimit(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfDashMode_Internal HPDF_Page_GetDash(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static float HPDF_Page_GetFlat(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static float HPDF_Page_GetCharSpace(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static float HPDF_Page_GetWordSpace(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static float HPDF_Page_GetHorizontalScalling(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static float HPDF_Page_GetTextLeading(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfTextRenderingMode HPDF_Page_GetTextRenderingMode(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static float HPDF_Page_GetTextRaise(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfRGBColor HPDF_Page_GetRGBFill(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfRGBColor HPDF_Page_GetRGBStroke(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfCMYKColor HPDF_Page_GetCMYKFill(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfCMYKColor HPDF_Page_GetCMYKStroke(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static float HPDF_Page_GetGrayFill(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static float HPDF_Page_GetGrayStroke(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfColorSpace HPDF_Page_GetStrokingColorSpace(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfColorSpace HPDF_Page_GetFillingColorSpace(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfTransMatrix HPDF_Page_GetTextMatrix(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_GetGStateDepth(IntPtr page);
/*--- General graphics state -----------------------------------------------*/
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetLineWidth(IntPtr page,
float line_width);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetLineCap(IntPtr page,
HPdfLineCap line_cap);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetLineJoin(IntPtr page,
HPdfLineJoin line_join);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetMiterLimit(IntPtr page,
float miter_limit);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetDash(IntPtr page,
ushort[] array, uint num_param, uint phase);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetFlat(IntPtr page,
float flatness);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetExtGState(IntPtr page,
IntPtr ext_gstate);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_GSave(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_GRestore(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_Concat(IntPtr page,
float a, float b, float c, float d, float x, float y);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_MoveTo(IntPtr page,
float x, float y);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_LineTo(IntPtr page,
float x, float y);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_CurveTo(IntPtr page,
float x1, float y1, float x2, float y2, float x3, float y3);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_CurveTo2(IntPtr page,
float x2, float y2, float x3, float y3);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_CurveTo3(IntPtr page,
float x1, float y1, float x3, float y3);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_ClosePath(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_Rectangle(IntPtr page,
float x, float y, float width, float height);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_Stroke(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_ClosePathStroke(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_Fill(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_Eofill(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_FillStroke(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_EofillStroke(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_ClosePathFillStroke(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_ClosePathEofillStroke(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_EndPath(IntPtr page);
/*--- Clipping paths operator --------------------------------------------*/
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_Clip(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_Eoclip(IntPtr page);
/*--- Text object operator -----------------------------------------------*/
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_BeginText(IntPtr page);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_EndText(IntPtr page);
/*--- Text state ---------------------------------------------------------*/
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetCharSpace(IntPtr page,
float value);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetWordSpace(IntPtr page,
float value);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetHorizontalScalling(IntPtr page,
float value);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetTextLeading(IntPtr page,
float value);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetFontAndSize(IntPtr page,
IntPtr hfont, float size);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetTextRenderingMode(IntPtr page,
HPdfTextRenderingMode mode);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetTextRaise(IntPtr page,
float value);
/*--- Text positioning ---------------------------------------------------*/
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_MoveTextPos(IntPtr page,
float x, float y);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_MoveTextPos2(IntPtr page,
float x, float y);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetTextMatrix(IntPtr page,
float a, float b, float c, float d, float x, float y);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_MoveToNextLine(IntPtr page);
/*--- Text showing -------------------------------------------------------*/
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_ShowText(IntPtr page,
string text);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_ShowTextNextLine(IntPtr page,
string text);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_ShowTextNextLineEx(IntPtr page,
float word_space, float char_space, string text);
/*--- Color showing ------------------------------------------------------*/
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetGrayFill(IntPtr page,
float gray);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetGrayStroke(IntPtr page,
float gray);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetRGBFill(IntPtr page,
float r, float g, float b);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetRGBStroke(IntPtr page,
float r, float g, float b);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetCMYKFill(IntPtr page,
float c, float m, float y, float k);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetCMYKStroke(IntPtr page,
float c, float m, float y, float k);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_ExecuteXObject(IntPtr page,
IntPtr obj);
/*---------------------------------------------------------------------*/
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_DrawImage(IntPtr page,
IntPtr image, float x, float y, float width, float height);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_Circle(IntPtr page,
float x, float y, float ray);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_Arc(IntPtr page,
float x, float y, float ray, float ang1, float ang2);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_Ellipse(IntPtr page,
float x, float y, float xray, float yray);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_TextOut(IntPtr page,
float xpos, float ypos, string text);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_TextRect(IntPtr page,
float left, float top, float right, float bottom,
string text, HPdfTextAlignment align, ref uint len);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Page_SetSlideShow(IntPtr page,
HPdfTransitionStyle type, float disp_time, float trans_time);
@@ -1660,8 +1773,12 @@ public class HPdfPage{
public void SetRGBStroke(float r, float g, float b) {
HPDF_Page_SetRGBStroke(hpage, r, g, b);
}
+
+ public void SetCMYKFill( HPdfCMYKColor color ) {
+ SetCMYKFill(color.c, color.m, color.y, color.k);
+ }
- public void SetCMYKFill(float c, float m, float y, float k) {
+ public void SetCMYKFill(float c, float m, float y, float k) {
HPDF_Page_SetCMYKFill(hpage, c, m, y, k);
}
@@ -1707,36 +1824,36 @@ public class HPdfPage{
}
public class HPdfFont {
- [DllImport("libhpdf.dll")]
- private extern static string HPDF_Font_GetFontName(IntPtr hfont);
+ [DllImport(HPDF_DLL.Name)]
+ private extern static IntPtr HPDF_Font_GetFontName(IntPtr hfont);
- [DllImport("libhpdf.dll")]
- private extern static string HPDF_Font_GetEncodingName(IntPtr hfont);
+ [DllImport(HPDF_DLL.Name)]
+ private extern static IntPtr HPDF_Font_GetEncodingName(IntPtr hfont);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static int HPDF_Font_GetUnicodeWidth(IntPtr hfont,
ushort code);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfBox HPDF_Font_GetBBox(IntPtr hfont);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static int HPDF_Font_GetAscent(IntPtr hfont);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static int HPDF_Font_GetDescent(IntPtr hfont);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Font_GetXHeight(IntPtr hfont);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Font_GetCapHeight(IntPtr hfont);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfTextWidth HPDF_Font_TextWidth(IntPtr hfont,
string text, uint len);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Font_MeasureText(IntPtr hfont,
string text, uint len, float width, float font_size,
float char_space, float word_space, int wordwrap,
@@ -1758,11 +1875,11 @@ public class HPdfFont {
}
public string GetFontName() {
- return HPDF_Font_GetFontName(hfont);
+ return System.Runtime.InteropServices.Marshal.PtrToStringAnsi(HPDF_Font_GetFontName(hfont));
}
public string GetEncodingName() {
- return HPDF_Font_GetEncodingName(hfont);
+ return System.Runtime.InteropServices.Marshal.PtrToStringAnsi(HPDF_Font_GetEncodingName(hfont));
}
public int GetUnicodeWidth(ushort code) {
@@ -1803,11 +1920,11 @@ public class HPdfFont {
}
public class HPdfOutline {
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Outline_SetOpened(IntPtr houtline,
int opened);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Outline_SetDestination(IntPtr houtline,
IntPtr hdest);
@@ -1852,19 +1969,19 @@ public class HPdfEncoder {
this.hencoder = hencoder;
}
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfEncoderType HPDF_Encoder_GetType(IntPtr
hencoder);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfByteType HPDF_Encoder_GetByteType(IntPtr
hencoder, string text, uint index);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static ushort HPDF_Encoder_GetUnicode(IntPtr
hencoder, ushort code);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfWritingMode HPDF_Encoder_GetWritingMode(IntPtr
hencoder);
@@ -1892,33 +2009,33 @@ public class HPdfEncoder {
}
public class HPdfDestination {
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Destination_SetXYZ(IntPtr hdest,
float left, float top, float zoom);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Destination_SetFit(IntPtr hdest);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Destination_SetFitH(IntPtr hdest,
float top);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Destination_SetFitV(IntPtr hdest,
float left);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Destination_SetFitR(IntPtr hdest,
float left, float bottom, float right, float top);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Destination_SetFitB(IntPtr hdest);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Destination_SetFitBH(IntPtr hdest,
float top);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Destination_SetFitBV(IntPtr hdest,
float left);
@@ -1972,19 +2089,19 @@ public class HPdfDestination {
public class HPdfAnnotation {
IntPtr hannot;
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_LinkAnnot_SetHighlightMode(IntPtr hannot,
HPdfAnnotHighlightMode mode);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_LinkAnnot_SetBorderStyle(IntPtr hannot,
float width, ushort dash_on, ushort dash_off);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_TextAnnot_SetIcon(IntPtr hannot,
HPdfAnnotIcon icon);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_TextAnnot_SetOpened(IntPtr hannot,
int opened);
@@ -2044,27 +2161,27 @@ public class HPdfXObject {
public class HPdfImage: HPdfXObject {
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static HPdfPoint HPDF_Image_GetSize(IntPtr image);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Image_GetWidth(IntPtr image);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Image_GetHeight(IntPtr image);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Image_GetBitsPerComponent(IntPtr image);
- [DllImport("libhpdf.dll")]
- private extern static string HPDF_Image_GetColorSpace(IntPtr image);
+ [DllImport(HPDF_DLL.Name)]
+ private extern static IntPtr HPDF_Image_GetColorSpace(IntPtr image);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_Image_SetColorMask(IntPtr image,
uint rmin, uint rmax, uint gmin, uint gmax, uint bmin, uint bmax);
- [DllImport("libhpdf.dll")]
- private extern static string HPDF_Image_SetMaskImage(IntPtr image,
+ [DllImport(HPDF_DLL.Name)]
+ private extern static uint HPDF_Image_SetMaskImage(IntPtr image,
IntPtr mask_image);
public HPdfImage(IntPtr hobj): base (hobj) {
@@ -2087,7 +2204,7 @@ public class HPdfImage: HPdfXObject {
}
public string GetColorSpace() {
- return HPDF_Image_GetColorSpace(hobj);
+ return System.Runtime.InteropServices.Marshal.PtrToStringAnsi(HPDF_Image_GetColorSpace(hobj));
}
public void SetColorMask(uint rmin, uint rmax, uint gmin, uint gmax,
@@ -2104,15 +2221,15 @@ public class HPdfImage: HPdfXObject {
public class HPdfExtGState {
protected IntPtr hgstate;
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_ExtGState_SetAlphaStroke(IntPtr gstate,
float value);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_ExtGState_SetAlphaFill(IntPtr gstate,
float value);
- [DllImport("libhpdf.dll")]
+ [DllImport(HPDF_DLL.Name)]
private extern static uint HPDF_ExtGState_SetBlendMode(IntPtr gstate,
HPdfBlendMode mode);
--
2.21.1 (Apple Git-122.3)