2019年7月12日 星期五

[PDF] 新增頁碼、取得PDF頁數 (itextsharp)


PDF加入頁碼有查到兩種方式

一種是繼承PdfPageEventHelper,然後再override OnEndPage 加入頁碼

另一種則是類似用加入浮水印方式用PdfStamper來加入頁碼

個人採用後者,主要用在已經產生好的PDF上


public static void AddPageNumber(string fileIn, string fileOut)
{
    byte[] bytes = File.ReadAllBytes(fileIn);
    Font blackFont = FontFactory.GetFont("Arial", 10, Font.NORMAL, BaseColor.BLACK);
    using (MemoryStream stream = new MemoryStream())
    {
        PdfReader reader = new PdfReader(bytes);
        using (PdfStamper stamper = new PdfStamper(reader, stream))
        {
            int pages = reader.NumberOfPages;
            for (int i = 1; i <= pages; i++)
            {
                ColumnText.ShowTextAligned(stamper.GetUnderContent(i), Element.ALIGN_RIGHT, new Phrase(i.ToString(), blackFont), 568f, 15f, 0);
            }
        }
        bytes = stream.ToArray();
    }
    File.WriteAllBytes(fileOut, bytes);
}


最後附上查詢頁碼Code

//查詢PDF頁碼
string ppath = rootpath + "XXX.pdf";
PdfReader pdfReader = new PdfReader(ppath);
int numberOfPages = pdfReader.NumberOfPages;
Console.WriteLine(numberOfPages);
Console.ReadLine();

2019年7月10日 星期三

[pdf] 合併多筆PDF


itextsharp 合併多筆pdf

參考

2019年7月8日 星期一

[HTML] canvas手寫板範例

連結 

直接把內容html下載下來, 用瀏覽器開啟即可

簡單來說,就是分兩頁畫布, 可以手寫清除這樣

儲存是沒有功能的,因為沒有實際接API


2019年7月4日 星期四

[HTML] 多個Canvas合併為一個Canvas

多個canvas合併為一個

要先建立一個新的canvas 來畫出要合併的三個canvas

//三張圖合併一張圖
var canvas1 = document.querySelectorAll('Canvas')[0];
var canvas2 = document.querySelectorAll('Canvas')[1];
var canvas3 = document.querySelectorAll('Canvas')[2];
var canvas = document.getElementById("finalCanvas");
canvas.height = canvas1.clientHeight + canvas2.height + canvas3.height;
canvas.width = canvas1.width;
var domContext = canvas.getContext('2d');

domContext.drawImage(canvas3, 0, canvas1.height + canvas2.height);
domContext.drawImage(canvas2, 0, canvas1.height );
domContext.drawImage(canvas1, 0, 0);
 
var dataURL = canvas.toDataURL();   //get base64 img

2019年7月3日 星期三

[JS] 新頁面關閉束後回傳值給舊頁面 (window opener)

遇到一個狀況是原本頁面新開一個頁面

新頁面處理完後關掉並回傳一些內容給原本頁面

先在原本頁面 :

//新開視窗
newwindow = window.open("/newpage");
//新視窗關閉事件
newwindow.onbeforeunload = function () {
    var val = document.getElementById('textfield').value
    
}

然後在新頁面加上

window.opener.document.getElementById('textfield').value ='test';
window.close();

如此在新頁面結束時,就會把值'test' 傳回原先頁面的textfield欄位囉


ps.如果遇到要在平板上使用可以參考以下
https://stackoverflow.com/questions/32639654/window-opener-with-a-custom-function-does-not-work-in-safari/32640630#32640630

2019年6月27日 星期四

[C#] 基礎連接已關閉: 傳送時發生未預期的錯誤











最近一個爬資料程式遇到"基礎連接已關閉: 傳送時發生未預期的錯誤"

查了一下原因應是TLS舊的1.0有資安問題, 個網站已經陸續被停用
(相關文章)

因此我們可加入以下code,設定相關通訊協定

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

要注意 一下.NET版本, 4.5以上有支援



參考 : https://blog.darkthread.net/blog/webclient-and-tls12/
https://stackoverflow.com/questions/19639846/failure-on-httpwebrequest-with-inner-exception-authentication-failed-because-the/39534068#39534068

2019年6月6日 星期四

[C#] itextsharp (5.x版)

最近遇到需求要產出pdf

但又遇到server沒有office, 無法直接把word轉成PDF

所以直接用itext自己建立一份PDF

建立過程中遇到
1.建立固定Header,Footer
2.加入浮水印
3.加入圖片
4.建立表格

先記錄一下參考的網站,整體來說基本問題都能解決了~

參考
pdf footer,header :
http://kuujinbo.info/cs/itext.aspx
https://www.codeproject.com/Questions/112064/How-to-add-Header-and-Footer-in-a-pdf-using-itexts
https://stackoverflow.com/questions/39603619/footer-in-pdf-with-itextsharp?answertab=active#tab-top

add image : 
https://dotblogs.com.tw/kevinya/2016/01/07/101253