以下代码工作正常,没有错误,但不能按要求工作。。
问题1:我想下载pdf文件并重定向到主页(url:../)。每当我打开url(../admin/generate\u pdf)
问题2:当我取消注释P中的注释行时dfdemo.java它给我一个错误404页面未找到。
Pdfdemo。Java语言
public class Pdfdemos {
private static String USER_PASSWORD = "password";
private static String OWNER_PASSWORD = "lokesh";
public String generate_pdf() {
try {
String file_name="d:\\sanjeet7.pdf";
Document document= new Document();
PdfWriter writer=PdfWriter.getInstance(document, new FileOutputStream(file_name));
// writer.setEncryption(USER_PASSWORD.getBytes(),
// OWNER_PASSWORD.getBytes(), PdfWriter.ALLOW_PRINTING |PdfWriter.ALLOW_ASSEMBLY|
// PdfWriter.ALLOW_COPY|
// PdfWriter.ALLOW_DEGRADED_PRINTING|
// PdfWriter.ALLOW_FILL_IN|
// PdfWriter.ALLOW_MODIFY_ANNOTATIONS|
// PdfWriter.ALLOW_MODIFY_CONTENTS|
// PdfWriter.ALLOW_SCREENREADERS|
// PdfWriter.ALLOW_ASSEMBLY|
// PdfWriter.ENCRYPTION_AES_128, 0);
document.open();
document.add(new Paragraph(" "));document.add(new Paragraph(" "));
String days_in_week[]= {"monday","tuesday","webnesday","thursday","friday","saturday"};
int period=8;
String user="springstudent";
String pass="springstudent";
String jdbcUrl="jdbc:mysql://localhost:3306/web_customer_tracker?useSSL=false";
String driver="com.mysql.jdbc.Driver";
Connection myconn=DriverManager.getConnection(jdbcUrl,user,pass);
PreparedStatement ps=null;
ResultSet rs=null;
String query="select * from class_t";
ps=myconn.prepareStatement(query);
rs=ps.executeQuery();
while(rs.next()) {
Paragraph para=new Paragraph("Time table for class"+rs.getString("class")+rs.getString("section"));
document.add(para);
System.out.println(rs.getInt("id"));
PdfPTable table=new PdfPTable(period+1);
for(int i=0;i<days_in_week.length;i++) {
for(int j=0;j<period+1;j++) {
if(j==5) {
table.addCell("recess");
}else {
table.addCell("this is "+j);
}
}
}
document.add(table);
document.newPage();
}
document.close();
System.out.println("finish");
return file_name;
}catch(Exception e) {
System.out.println(e);
}
return null;
}
}
生成pdf_控制器。Java语言
@Controller
@RequestMapping("/admin/generate_pdf")
public class Generate_pdf_Controller {
@GetMapping("/online")
public String generating_pdf(Model theModel) {
System.out.println("hello");
CustomerServiceImpl pal=new CustomerServiceImpl();
Pdfdemos pal1=new Pdfdemos();
String xx=pal1.generate_pdf();
return "redirect:/";
}
}
只需获取pdf(从本地文件系统下载到浏览器中),以下代码就足够了:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/admin/generate_pdf")
public class PdfController {
@GetMapping(value = "/online", /*this is "nice to have" ->*/ produces = MediaType.APPLICATION_PDF_VALUE)
@ResponseBody // this is important, as the return type byte[]
public byte[] generating_pdf() throws IOException {//exception handling...
System.out.println("hello");//logging
// re-generate new file if needed (thread-safety!)...
// ..and dump the content as byte[] response body:
return Files.readAllBytes(Paths.get("d:\\sanjeet7.pdf"));
}
}
... 如果您需要“刷新”,您可以“重写”文件/重新调用您的服务,但可能仍然不是“线程最安全”的解决方案。
编辑:无需进一步配置(端口/上下文根/…),您可以通过以下网址访问:http://localhost:8080/admin/generate_pdf/online
如果您希望“操作更接近字节”,并使用返回类型/no@ResponseBody
,并且希望额外的重定向(待测试),我认为这应该仍然有效:
@Controller
public class ... {
@GetMapping(value = ..., produces ...)
//no request body, void return type, response will be autowired and can be handled
public void generatePdf(javax.servlet.http.HttpServletResponse response) throws ... {
java.io.OutputStream outStr = response.getOutputStream();
// dump from "somewhere" into outStr, "finally" close.
outStr.close();
//TO BE TESTED:
response.sendRedirect("/");
}
}
..甚至(返回“视图名称”对outputStream进行操作):
@GetMapping(value = ..., produces = "application/pdf")
//return a "view name" (!), and you can inject (only) the outputstream (without enclosing response)
public String generatePdf(java.io.OutputStream outputstream) throws... {
// ... do your things on outputstream, IOUtils is good...
// close the stream(?)
// ..and
return "redirect:/"; // to a redirect or a view name.
// .... (in a "spring way", which could also save you some "context path problems"
} ...
创建和下载PDF的简化版本:
@Service
public class PdfService {
public InputStream createPdf() throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream();
Document document = new Document(PageSize.A4, 50, 50, 50, 50);
PdfWriter writer = PdfWriter.getInstance(document, out);
writer.setEncryption("user_password".getBytes(), "owner_password".getBytes(),
PdfWriter.ALLOW_PRINTING |
PdfWriter.ALLOW_ASSEMBLY |
PdfWriter.ALLOW_COPY |
PdfWriter.ALLOW_DEGRADED_PRINTING |
PdfWriter.ALLOW_FILL_IN |
PdfWriter.ALLOW_MODIFY_ANNOTATIONS |
PdfWriter.ALLOW_MODIFY_CONTENTS |
PdfWriter.ALLOW_SCREENREADERS |
PdfWriter.ALLOW_ASSEMBLY |
PdfWriter.ENCRYPTION_AES_128, 0);
document.open();
document.add(new Paragraph("My example PDF document"));
// some logic here
document.close();
return new ByteArrayInputStream(out.toByteArray());
}
}
@Controller
@RequestMapping("/admin/generate_pdf")
public class PdfController {
@Autowired
private PdfService pdfService;
@GetMapping("/online")
public void generatePdf(HttpServletResponse response) throws Exception {
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=\"mydocument.pdf\"");
InputStream pdf = pdfService.createPdf();
org.apache.commons.io.IOUtils.copy(pdf, response.getOutputStream());
response.flushBuffer();
}
}
重定向怎么样,正如我在评论中所说,您可以在前端使用JS(在调用/admin/generate_pdf/online
url之后)。您不能同时下载文件并进行刷新/重定向。
所以我有这个凭证,用户可以下载,但之后,它需要重定向到另一个页面。什么是解决这个问题的好方法,并且在大多数浏览器上是兼容的?
大家好,我是android开发的新手,我想在我的应用程序webView中下载一个pdf文件,我使用下面的代码,但是当我尝试打开它时,应用程序将我重定向到my phone web浏览器,我该如何解决它,我该如何在我的webView中下载pdf文件
问题内容: 我正在使用maatwebsite / excel库创建excel文件,然后下载我的文件 在我的控制器中,我这样做: 这是我生成excel文件的功能: 但是在下载excel文件后,我无法重定向到路线或视图,并且我也尝试使用: 路线: 过滤: 但无论如何都没用,下载我的文件后还有另一种重定向的方式? 提前谢谢! 问题答案: 无法完成。问题是,如果您向用户浏览器发送下载指令,则实际上是在发送
文件当前将转到:
问题内容: 我正在尝试使用selenium从网站下载pdf文件,但我能够打开文件,但无法使用代码自动下载。 码: 请提出建议。先感谢您 问题答案: 以上问题现已解决
我可以通过以下服务下载pdf文件: 但是,当我运行该服务时,我得到了以下响应: %���� 10 obj 要打开pdf,我需要用第二个鼠标按钮点击响应链接: WS网址 然后选择“在新选项卡中打开”以打开pdf文件,看起来您正在运行该服务两次以获得一次pdf文件。 我想自动打开每个请求到WS的pdf文件。 这意味着每次您请求WS时,都应该返回直接在屏幕中打开的pdf文件。 有人能帮我修一下吗? Tk