อยากแปลงไฟล์(word, excel, power point) ให้เป็นไฟล์ PDF แล้วห้ามSaveตอนเปิดดูโดยให้แปลงทันทีหลังจากเรา upload file ไปแล้ว(ผมอยากให้ลงdbด้วยlinqเพียงแต่ผมยังทำไม่ได้)
คือ ผมอยากขอความช่วยเหลือน่ะครับ งานที่ผมได้รับมอบหมายคือการ upload file (word, excel, power point)แล้วแปลงไฟล์ที่ upload ให้เป็น pdf แล้วเวลาเปิดดูห้าม save ครับ ส่วนโค๊ดคือผม upload file ทุกชนิดที่ถามไปได้แล้ว รบกวนช่วยผมด้วยครับ
Code (ASP)
<%@ Page Language="C#" Debug="true" %>
<script runat="server">
protected void btnupload_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
string fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName);
if (fileExtension.ToLower() != ".pdf" && fileExtension.ToLower() != ".doc" && fileExtension.ToLower() != ".docx" &&
fileExtension.ToLower() != ".xls" && fileExtension.ToLower() != ".xlsx" && fileExtension.ToLower() != ".ppt" &&
fileExtension.ToLower() != ".pptx")
{
lblMessage.Text = "Only files with .pdf, .doc, .docx, .xls, .xlsx, .ppt extension are allowed";
lblMessage.ForeColor = System.Drawing.Color.Red;
}
else
{
int fileSize = FileUpload1.PostedFile.ContentLength;
if (fileSize > 2097152)
{
lblMessage.Text = "Maximun file size (2MB) exceeded";
lblMessage.ForeColor = System.Drawing.Color.Red;
}
else
{
FileUpload1.SaveAs(Server.MapPath("Uploads/" + FileUpload1.FileName));
lblMessage.Text = "File Uploaded";
lblMessage.ForeColor = System.Drawing.Color.Green;
}
}
}
else
{
lblMessage.Text = "Please select a file to upload";
lblMessage.ForeColor = System.Drawing.Color.Red;
}
}
</script>
<html>
<head>
<title>Upload</title>
</head>
<body>
<form id="Form1" runat="server">
<div>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="btnupload" runat="server" Text="Upload File"
onclick="btnupload_Click" />
<br /><br />
<asp:Label ID="lblMessage" runat="server" Font-Bold="true"></asp:Label>
</div>
</form>
</body>
</html>
Tag : .NET, Web (ASP.NET), LINQ, C#, VS 2010 (.NET 4.x), VS 2012 (.NET 4.x)
Date :
2014-05-05 23:38:50
By :
babluebuu
View :
2085
Reply :
3
ขั้นตอนมีดังนี้
1. บนเครื่อง server ต้องติดตั้งชุด Microsoft Office ก่อนนะครับ
2. ต้องแก้ไข web.config เพื่อเปิดสิทธิ์ในการใช้งาน Interop dll โดยการกำหนด Impersonate User ให้ทำงานได้
Code (XML)
<system.web>
<authentication mode="Windows"/>
<identity impersonate="true" userName="ชื่อผู้ใช้" password="รหัสผ่าน"/>
</system.web>
user ผู้นี้คือผู้ที่มีสิทธิ์ในการ Access Microsoft Office ทุกประการ (ต้องไปศึกษาการกำหนด Role User ในเครื่อง Server ด้วยนะครับ) หรือถ้าคิดว่าอยู่นอกเหนือจากงาน Programming ก็ให้ปรึกษาคนที่คุม Server เอานะครับ (แต่ส่วนใหญ่จะไม่พ้นโปรแกรมเมอร์ อิอิ)
3. เมื่อ upload ไฟล์ Office ขึ้นไปได้แล้ว สร้างโปรแกรม Convert เพิ่มเติม โดยเข้าไปศึกษาวิธีทำได้ที่
http://code.msdn.microsoft.com/office/Word-file-to-PDF-Conversion-261fd865
4. ไม่แน่ใจว่าเข้าใจถูกมั้ย คือหลังจากที่ได้ pdf ที่อยู่บนเครื่อง Server แล้ว เมื่อผู้ใช้งานทำการเปิดเอกสาร pdf ทาง Server จะไม่ทำการ Download ลงมาที่ Client ตรงๆ เพราะติดเรื่อง Security แต่ควรจะต้องเปิด pdf บน Browser แทน ถ้าเป็นวิธีการนี้ ให้ render stream ลงมาแทน ซึ่งเขียนได้ในลักษณะนี้
Code (ASP)
protected void btOpenPDF_Click(object sender, EventArgs e) {
string path = Server.MapPath("office.pdf");
WebClient client = new WebClient();
Byte[] buffer = client.DownloadData(path);
if (buffer != null) {
Response.ContentType = "application/pdf";
Response.AddHeader("content-length", buffer.Length.ToString());
Response.BinaryWrite(buffer);
}
}
5. จาก Code ด้านบน จะสามารถเปิด pdf และสั่งบันทึกหรือ Print ออกมาได้ ถ้าไม่ต้องการ ให้ไปศึกษาวิธีการ Pass Parameter สำหรับ pdf file ได้ที่
http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_open_parameters.pdf
เป็นเอกสารของทาง Adobe อย่างเช่นถ้าเราต้องการปิด Toolbar ก็ให้ส่งค่าไปดังนี้
Code (C#)
string path = Server.MapPath("office.pdf#toolbar=0");
หลักการทั้งหมดก็มีอยู่เท่านี้แหละครับ คิดว่า จขกท. คงทำได้ไม่ยากนะครับ ค่อยๆ ศึกษาไปครับ ผมเองยังไม่ได้ลองเขียนว่าใช้งานได้หรือไม่ ในส่วน render stream แล้วปิดไม่ให้มีปุ่ม save ให้ลองดูก่อนครับ ถ้่าติดปัญหายังไงบอกด้วย เผื่อมีเวลาจะลง code จริงให้ครับ โชคดี
ประวัติการแก้ไข 2014-05-06 01:26:27
Date :
2014-05-06 01:22:16
By :
gunnermontana
ผมขอขอบคุณด้วยครับ
ท่านอธิบายได้เป็นขั้นตอน มี code ประกอบ แถมยังมี link ให้ไปศึกษาเพิ่มเติมได้อีก
ผมมีประเด็นเพิ่มดังนี้ครับ
ในเรื่องปิด toolbar ถ้าเครื่องนั้นใช้ reader ของ adobe จะสามารถปิด toolbar ได้ แต่ถ้าใช้ ยี่ห้ออื่นเช่น foxit reader มันกันไม่ได้ครับ
(เคยลองเมื่อสองปีก่อนครับ)
ขอบคุณอีกครั้งครับ
Date :
2014-05-06 08:04:56
By :
Aod47
ขอบคุณครับ เด๊วผมขอลองก่อนนะครับ เด๊วมาบอก
Date :
2014-05-06 09:19:00
By :
babluebuu
Load balance : Server 00