Provide open/save option when pdf opens in browser - asp.net-mvc-3

when my user clicks a link i'd like to provide the standard open/save dialog for the pdf, instead of opening it in the browser...using the ffg code to generate the pdf:
Document document = new Document();
MemoryStream stream = new MemoryStream();
try
{
PdfWriter pdfWriter = PdfWriter.GetInstance(document, stream);
pdfWriter.CloseStream = false;
document.Open();
document.Add(new Paragraph("Hello World"));
}
catch (DocumentException de)
{
Console.Error.WriteLine(de.Message);
}
catch (IOException ioe)
{
Console.Error.WriteLine(ioe.Message);
}
document.Close();
stream.Flush();
stream.Position = 0;
return File(stream, "application/pdf");

Try providing a name to the file when returning it by using the third argument of the File method:
return File(stream, "application/pdf", "report.pdf");

Document document = new Document();
FileStream stream = new FileStream("report.pdf", FileMode.Create);
try
{
PdfWriter pdfWriter = PdfWriter.GetInstance(document, stream);
pdfWriter.CloseStream = false;
document.Open();
document.Add(new Paragraph("Hello World"));
}
catch (DocumentException de)
{
Console.Error.WriteLine(de.Message);
}
catch (IOException ioe)
{
Console.Error.WriteLine(ioe.Message);
}
document.Close();
stream.Flush();
stream.Position = 0;
return File(stream, "application/pdf");

Related

Itext7 - html2PDF issue with rendering the ordered list

Iam using Itext7 HTML2PDF 3.0.5 to convert my html to PDF. In my html I have an ordered List and after converting to HTML, the listis been overalpped by the content of the list.
Before i was using ITEXT XMLWorker, with i don't have this issue but i ahve other issues with tables. To fix them I moved to itext7 htmltopdf.
Could some one please help me with this issue?
Here is my sample code snippet
public static byte[] html2pdf(String htmlString) throws Exception {
Document pdfDoc = null;
ByteArrayOutputStream baos = null;
try {
baos = new ByteArrayOutputStream();
PdfWriter pdfWriter = new PdfWriter(baos);
PdfDocument pdfDocument = new PdfDocument(pdfWriter);
ConverterProperties converterProperties = new ConverterProperties();
HtmlConverter.convertToPdf(htmlString, pdfDocument, converterProperties);
pdfDocument.close();
return baos.toByteArray();
} catch (Exception exception) {
return null;
} finally {
try {
baos.close();
} catch (Exception ignored) {
}
}
}
sample1-generated pdf
sample2-generated pdf
sample1-Expected result
sample2-expected result

Xamarin : Convert image to Pdf format in Xamarin.forms

I am getting error width cannot be null , when passing image to inputstream.As i didn't find any alterante method . Basically i want to convert image to Pdf format in Xamarin.forms which supports UWP platform .
I am using xfinium pdf library for this.
public void ConvertJpegToPdf()
{
try
{
PdfFixedDocument document = new PdfFixedDocument();
Xfinium.Pdf.PdfPage page = document.Pages.Add();
page.Width = 800;
page.Height = 600;
var imageStream = GetStream();
PdfJpegImage jpeg = new PdfJpegImage(imageStream);//<-Error
PdfStandardFont helvetica = new PdfStandardFont(PdfStandardFontFace.Helvetica, 24);
PdfBrush brush = new PdfBrush(PdfRgbColor.Red);
page.Graphics.DrawImage(jpeg, 0, 0, page.Width, page.Height);
Stream pdfStream = null;
document.Save(pdfStream);
}
catch (Exception ex)
{
throw ex;
}
}
protected Stream GetStream()
{
byte[] byteArray = Encoding.UTF8.GetBytes("http://david.qservicesit.com/images/3.jpg");
MemoryStream stream = new MemoryStream(byteArray);
return stream;
}
Please suggest some alternate to do this
byte[] byteArray = Encoding.UTF8.GetBytes("http://david.qservicesit.com/images/3.jpg");
You could not get image stream in this way. The method you have used can only get the Bytes of string. For your scenario, you could use http client to acquire image stream. Please refer to the following code:
public async Task<Stream> GetStream()
{
HttpClient client = new HttpClient();
HttpResponseMessage res = await client.GetAsync(new Uri("http://david.qservicesit.com/images/3.jpg"));
Stream stream = await res.Content.ReadAsStreamAsync();
return stream;
}
public async Task ConvertJpegToPdf()
{
try
{
PdfFixedDocument document = new PdfFixedDocument();
Xfinium.Pdf.PdfPage page = document.Pages.Add();
page.Width = 800;
page.Height = 600;
var imageStream = await GetStream();
PdfJpegImage jpeg = new PdfJpegImage(imageStream);
PdfStandardFont helvetica = new PdfStandardFont(PdfStandardFontFace.Helvetica, 24);
PdfBrush brush = new PdfBrush(PdfRgbColor.Red);
page.Graphics.DrawImage(jpeg, 0, 0, page.Width, page.Height);
Stream pdfStream = new MemoryStream();
document.Save(pdfStream);
}
catch (Exception ex)
{
throw ex;
}
}

Get image from standard Android Gallery

I am having problems getting an image back from the default android gallery. All I want to do is call the Android standard gallery intent and return the uri for the image in my onActivityResult. When I run this code it open the gallery just fine but then it force closes whenever I click on a picture. Any tips for this would be helpful.
private void doGallery() {
Intent galleryIntent = new Intent();
galleryIntent.setType(IJudgeSingleton.IMAGEINTENT);
galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(galleryIntent, "Select Picture"), IJudgeSingleton.REQUEST_CODE_GALLERY);
}
case IJudgeSingleton.REQUEST_CODE_GALLERY:
Uri uri = data.getData();
mSingleton.mFileTemp = new File(getMediaPath(uri));
try {
IJudgeSingleton.copy(mSingleton.mFileTemp, mSingleton.mCropFileTemp);
mData.setImageSet(true, mSingleton.mFileTemp.toURI().toString(), true);
mData.setPhoto(true);
}
catch (IOException e) {
Log.d(this.getClass().getName(), "REQUEST_CODE_GALLERY", e);
}
break;
Figured it out my file was pointing to a null so that's what was giving me the force close. Also I had to add change some code around in my onActivityResult for REQUEST_CODE_GALLERY. I have posted the added code below for anyone who has this problem.
case IJudgeSingleton.REQUEST_CODE_GALLERY:
Uri uri = data.getData();
//This takes the uri/image returned from the gallery intent a places it into a file.
final int chunkSize = 1024; // We'll read in one kB at a time
byte[] imageData = new byte[chunkSize];
try {
InputStream in = getContentResolver().openInputStream(uri);
OutputStream out = new FileOutputStream(mSingleton.mFileTemp); // I'm assuming you already have the File object for where you're writing to
int bytesRead;
while ((bytesRead = in.read(imageData)) > 0) {
out.write(Arrays.copyOfRange(imageData, 0, Math.max(0, bytesRead)));
}
in.close();
out.close();
} catch (Exception ex) {
Log.e(this.getClass().getName(),"REQUEST_CODE_GALLERY");
}
// mSingleton.mFileTemp = new File(getMediaPath(uri));
try {
IJudgeSingleton.copy(mSingleton.mFileTemp, mSingleton.mCropFileTemp);
mData.setImageSet(true, mSingleton.mFileTemp.toURI().toString(), true);
mData.setPhoto(true);
}
catch (IOException e) {
Log.d(this.getClass().getName(), "REQUEST_CODE_GALLERY", e);
}
break;
case IJudgeSingleton.REQUEST_CODE_DEFAULT_CAPTURE:
mData = data.getParcelableExtra(IJudgeSingleton.SURVEY_INTENT);
showListView();
completedIntent = false;

File is getting locked on read/write operation in C#

A third party application is reading the output text file of my windows application,it is getting paused.I think,it is happening because of file gets locked either on writing or reading.how can i make this work fine.Please see my code.
List<string> fileList = new List<string>();
System.Timers.Timer timer;
string currentfilename;
string currentcontent;
public Service1()
{
//
timer = new System.Timers.Timer();
timer.AutoReset = false;
timer.Elapsed += new System.Timers.ElapsedEventHandler(DoStuff);
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
throw new NotImplementedException();
}
private void DoStuff(object sender, System.Timers.ElapsedEventArgs e)
{
DateTime LastChecked = DateTime.Now;
try
{
string[] files = System.IO.Directory.GetFiles(#"C:\Journal", "*.jrn", System.IO.SearchOption.AllDirectories);
foreach (string file in files)
{
if (!fileList.Contains(file))
{
currentfilename = file;
fileList.Add(file);
copywarehouse(file);
try
{
string sourcePath = #"C:\Journal";
string sourceFile = System.IO.Path.Combine(sourcePath, file);
using (FileStream fs= new FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
StreamReader sr = new StreamReader(fs);
currentcontent = sr.ReadToEnd();
sr.Close();
}
}
catch (Exception ex)
{
throw (ex);
}
}
}
try
{
string sourcePath1 = #"C:\Journal";
string currentfilecontent;
string sourceFile1 = System.IO.Path.Combine(sourcePath1, currentfilename);
using (FileStream fs = new FileStream(sourceFile1, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
StreamReader sr = new StreamReader(fs);
currentfilecontent = sr.ReadToEnd();
sr.Close();
}
if (currentfilecontent != currentcontent)
{
if (currentfilecontent.Contains(currentcontent))
{
string originalcontent = currentfilecontent.Substring(currentcontent.Length);
File.WriteAllText(#"C:\Journal\tempfile.txt", originalcontent + "\r\n");
using (FileStream fs = new FileStream(#"C:\Journal\tempfile.txt", FileMode.OpenOrCreate))
{
StreamWriter sw = new StreamWriter(fs);
sw.Write(originalcontent);
sw.Close();
}
currentcontent = currentfilecontent;
}
}
}
//}
catch (Exception ex)
{
throw (ex);
}
TimeSpan ts = DateTime.Now.Subtract(LastChecked);
TimeSpan MaxWaitTime = TimeSpan.FromMilliseconds(100);
if (MaxWaitTime.Subtract(ts).CompareTo(TimeSpan.Zero) > -1)
timer.Interval = MaxWaitTime.Subtract(ts).Milliseconds;
else
timer.Interval = 1;
timer.Start();
}
catch (Exception ex)
{
throw (ex);
}
}
private void copywarehouse(string filename)
{
string sourcePath = #"C:\Journal";
string targetPath = #"C:\Journal";
string copycontent=null;
try
{
string sourceFile = System.IO.Path.Combine(sourcePath, filename);
string destFile = System.IO.Path.Combine(targetPath, "tempfile.txt");
using (FileStream fs = new FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
StreamReader sr = new StreamReader(fs);
copycontent = sr.ReadToEnd();
sr.Close();
}
using (FileStream fs = new FileStream(destFile, FileMode.Append))
{
StreamWriter sw = new StreamWriter(fs);
sw.Write(copycontent);
sw.Close();
}
}
catch (Exception ex)
{
throw (ex);
}
}
Here the problem is with third party application which is reading my application output as input.it is not allowing access to more than one file content..

How do I read and write UTF-8 encoding from java assets folder? I have the code, but its not working. I get �D�nde est� / D�nde

private void CopyAssets2() {
AssetManager assetManager = getAssets();
String[] files = null;
try {
files = assetManager.list("");
} catch (IOException e) {
Log.e("File Error", e.getMessage());
}
for (String filename : files) {
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open(filename);
out = new FileOutputStream("/sdcard/Translate/" + filename);
copyFile2(in, out);
in.close();
in = null;
out.flush();
out.close();
out = null;
} catch (Exception e) {
Log.e("Save Error", e.getMessage());
}
}
}
private void copyFile2(InputStream in, OutputStream out)
throws IOException {
char[] buffer = new char[1024];
Reader reader = new BufferedReader( new InputStreamReader(in, "UTF-8"));
Writer writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
int read;
while ((read = reader.read(buffer)) != -1) {
writer.write(buffer, 0, read);
}
reader.close();
writer.flush();
writer.close();
}
Im getting the inputstream with assetManager, and passing it as a parameter of reader with UTF-8 encoding specified.
I'm also doing writing to the outputstream filepath with writer in UTF-8
The file is read and written, but the encoding is still wrong. I get characters like these:
Where are... = �D�nde est� / D�nde
What I am doing wrong?
Are you sure the input file is encoded in UTF-8? The � you see in the output is a character that is used as a replacement for byte sequences that could not be converted into characters when reading.
You could make a binary copy instead of decoding and encoding text:
byte[] buffer = new byte[1024];
InputStream reader = new BufferedInputStream(in);
OutputStream writer = new BufferedOutputStream(out);
int read;
while ((read = reader.read(buffer)) != -1) {
writer.write(buffer, 0, read);
}

Resources